def show_data(self, sheet_name): try: # 读取工作表中一行数据 df = pd.read_excel(self.file_name, sheet_name=sheet_name) row = df.iloc[0] # 在日志框中显示数据 self.log_text.delete(1.0, tk.END) for i, column_name in enumerate(df.columns): self.log_text.insert(tk.END, f"{column_name}: {row[column_name]}\n") # 根据数据内容自动添加下拉框和滑动条 for i, column_name in enumerate(df.columns): if isinstance(row[column_name], (int, float)): scale = ttk.Scale(self, from_=0, to=row[column_name], orient=tk.HORIZONTAL) scale.pack(side=tk.TOP, fill=tk.X, padx=10) elif isinstance(row[column_name], str): combobox = ttk.Combobox(self, values=["Option 1", "Option 2", "Option 3"]) combobox.pack(side=tk.TOP, fill=tk.X, padx=10) except Exception as e: self.log_text.insert(tk.END, str(e) + "\n")這段代碼爲什麽數據内容後面沒有顯示下拉輸入框,而下拉輸入框顯示到日志框外去了,怎麽將下拉輸入框顯示到日志框中
时间: 2023-11-30 16:02:16 浏览: 40
根据你提供的代码,下拉框和滑动条是根据数据内容自动添加的。但是它们并没有被添加到日志框中,而是被添加到了父级容器中。要将它们添加到日志框中,你可以将它们作为日志框的子组件添加到日志框中,例如:
```
scale = ttk.Scale(self.log_text, from_=0, to=row[column_name], orient=tk.HORIZONTAL)
scale.pack(side=tk.TOP, fill=tk.X, padx=10)
```
这样就将滑动条作为日志框的子组件添加到了日志框中。同样的,你也可以将下拉框作为日志框的子组件添加到日志框中。
相关问题
def show_data(self, sheet_name): try: # 读取工作表中一行数据 df = pd.read_excel(self.file_name, sheet_name=sheet_name) row = df.iloc[0] # 在日志框中显示数据 self.log_text.delete(1.0, tk.END) for i, column_name in enumerate(df.columns): self.log_text.insert(tk.END, f"{column_name}: {row[column_name]}\n") # 根据数据内容自动添加下拉框和滑动条 if isinstance(row[column_name], (int, float)): scale = ttk.Scale(self.log_text, from_=0, to=row[column_name], orient=tk.HORIZONTAL) scale.pack(side=tk.TOP, fill=tk.X, padx=10) elif isinstance(row[column_name], str): combobox = ttk.Combobox(self.log_text, values=["Option 1", "Option 2", "Option 3"]) combobox.pack(side=tk.TOP, fill=tk.X, padx=10) except Exception as e: self.log_text.insert(tk.END, str(e) + "\n")這就代碼中下拉輸入框遮到數據内容了,怎麽修改
您可以将下拉框和滑动条放在数据内容下面,例如使用一个Frame来包含每个数据内容和相应的下拉框/滑动条,然后将所有这些Frame添加到主窗口中。代码示例:
```
def show_data(self, sheet_name):
try:
# 读取工作表中一行数据
df = pd.read_excel(self.file_name, sheet_name=sheet_name)
row = df.iloc[0]
# 清空日志框
self.log_text.delete(1.0, tk.END)
# 创建一个Frame来包含每个数据内容和相应的下拉框/滑动条
frame_list = []
for i, column_name in enumerate(df.columns):
frame = tk.Frame(self.log_text)
frame.pack(side=tk.TOP, fill=tk.X, padx=10, pady=(5, 0))
label = tk.Label(frame, text=f"{column_name}: {row[column_name]}")
label.pack(side=tk.LEFT)
if isinstance(row[column_name], (int, float)):
scale = ttk.Scale(frame, from_=0, to=row[column_name], orient=tk.HORIZONTAL)
scale.pack(side=tk.RIGHT, fill=tk.X, expand=True)
elif isinstance(row[column_name], str):
combobox = ttk.Combobox(frame, values=["Option 1", "Option 2", "Option 3"])
combobox.pack(side=tk.RIGHT, fill=tk.X, expand=True)
frame_list.append(frame)
except Exception as e:
self.log_text.insert(tk.END, str(e) + "\n")
```
def show_data(self, sheet_name): try: # 读取工作表中所有数据 df = pd.read_excel(self.file_name, sheet_name=sheet_name) # 清空日志框 self.log_text.delete(1.0, tk.END) # 创建一个Frame来包含每个数据内容和相应的下拉框/滑动条 frame_list = [] for column_name in df.iloc[:, 0]: frame = tk.Frame(self.log_text) frame.pack(side=tk.TOP, fill=tk.X, padx=10, pady=(5, 0)) label = tk.Label(frame, text=f"{df.columns[0]}: ") label.pack(side=tk.LEFT) # 遍历每一行,获取该列的数据并更新下拉框/滑动条的取值范围 column_data = df[column_name] if isinstance(column_data.iloc[0], (int, float)): scale = ttk.Scale(frame, from_=0, to=column_data.max(), orient=tk.HORIZONTAL) scale.pack(side=tk.RIGHT, fill=tk.X, expand=True) elif isinstance(column_data.iloc[0], str): combobox = ttk.Combobox(frame, values=column_data.unique()) combobox.pack(side=tk.RIGHT, fill=tk.X, expand=True) frame_list.append(frame) except Exception as e: self.log_text.delete(1.0, tk.END) self.log_text.insert(tk.END, str(e) + "\n")將這段代碼中顯示數據修改為顯示A列的數據,每運行一次這個函數前需要清空日志框中數據
修改后的代码如下:
```
def show_data(self, sheet_name):
try:
# 读取工作表中A列所有数据
df = pd.read_excel(self.file_name, sheet_name=sheet_name, usecols=['A'])
# 清空日志框
self.log_text.delete(1.0, tk.END)
# 创建一个Frame来包含每个数据内容和相应的下拉框/滑动条
frame_list = []
for column_name in df.iloc[:, 0]:
frame = tk.Frame(self.log_text)
frame.pack(side=tk.TOP, fill=tk.X, padx=10, pady=(5, 0))
label = tk.Label(frame, text=f"{df.columns[0]}: ")
label.pack(side=tk.LEFT)
# 遍历每一行,获取该列的数据并更新下拉框/滑动条的取值范围
column_data = df[column_name]
if isinstance(column_data.iloc[0], (int, float)):
scale = ttk.Scale(frame, from_=0, to=column_data.max(), orient=tk.HORIZONTAL)
scale.pack(side=tk.RIGHT, fill=tk.X, expand=True)
elif isinstance(column_data.iloc[0], str):
combobox = ttk.Combobox(frame, values=column_data.unique())
combobox.pack(side=tk.RIGHT, fill=tk.X, expand=True)
frame_list.append(frame)
except Exception as e:
self.log_text.delete(1.0, tk.END)
self.log_text.insert(tk.END, str(e) + "\n")
```
每次运行这个函数前,需要再加上一行代码,清空日志框中的数据:
```
self.log_text.delete(1.0, tk.END)
```
阅读全文