这段代码,只有文本框能显示,其它控件都不能显示。为什么呢?class tkinterGUI(): root = None # 定义为类属性,可以在类的多个实例中共享 def __init__(self, geometry): pass def test(self): pass def create_root_win(self): self.root, self.文本框_主消息 = self.create_toplevel_win(True, "软件标题", "430x670", self.test, False, False) self.root.mainloop() # 在 create_root_win 方法中调用 mainloop 方法,显示窗口 def root_win_add1(self): if self.root is None: self.create_root_win() self.文本框_主消息.insert("1.0","efdssfdadsfasf") # 主内容区域 notebook = Notebook(self.root) notebook.pack(fill=tk.BOTH, expand=True) def create_toplevel_win(self,if_root,title,size,close_cmd,textbox_n,if_resize_width=True,if_resize_heigh=True): if if_root: mygui=tk.Tk() else: mygui=tk.Toplevel(self.root) 窗口win启动 = True mygui.title = title mygui.protocol('WM_DELETE_WINDOW', close_cmd) # 把点击x关闭窗口变成不要关闭并最小化到托盘 # 设置大小 居中展示 #win.bind("<Configure>", lambda root:win_mouse_release(root)) mygui.resizable(width=if_resize_width, height=if_resize_heigh) mygui.wm_attributes('-topmost', 1) #mygui.geometry(size+ "+" + str(self.root.winfo_x() + self.root.winfo_width()) + "+" + str(self.root.winfo_y())) mygui.geometry(size) tbox = ScrolledText(mygui) #self.eval("文本框"+title) = ScrolledText(self.win) tbox.place(relx=0.01, rely=0.18, relwidth=0.99, relheight=0.8) mygui.mainloop() return mygui,tbox # a,b=400,650 def show_msg_in_toplevel(self): self.win_msg,self.win_msg_tb= self.create_toplevel_win(self.root,"实时解盘","350x670",self.隐藏到任务栏,False,False) if __name__=="__main__": root=tkinterGUI("360x670") root.root_win_add1()
时间: 2023-05-19 19:01:32 浏览: 57
这段代码中,只有定义了一个类 tkinterGUI,但是并没有实例化该类,也没有在类中定义任何控件。因此,除了 root 变量被赋值为 None 外,其他控件都没有被创建,也就无法显示。需要在类中添加控件的定义和实例化代码,才能让它们显示在界面上。
相关问题
下列代码中,文本框能显示,其它控件如notebook都不能显示。请给出修改后的代码。import tkinter as tk import tkinter.font as tkFont from tkinter.scrolledtext import ScrolledText # 导入ScrolledText from tkinter.filedialog import * from tkinter.ttk import * from tkinter import * import tkinter.messagebox from pystray import MenuItem, Menu from PIL import Image import pandas as pd class tkinterGUI(): root = None # 定义为类属性,可以在类的多个实例中共享 def __init__(self, geometry): pass def test(self): pass def create_root_win(self): self.root, self.文本框_主消息 = self.create_toplevel_win(True, "软件标题", "430x670", self.test, False, False) self.root.mainloop() # 在 create_root_win 方法中调用 mainloop 方法,显示窗口 def root_win_add1(self): if self.root is None: self.create_root_win() self.文本框_主消息.insert("1.0","efdssfdadsfasf") # 主内容区域 notebook = Notebook(self.root) notebook.pack(fill=tk.BOTH, expand=True) def create_toplevel_win(self,if_root,title,size,close_cmd,textbox_n,if_resize_width=True,if_resize_heigh=True): if if_root: mygui=tk.Tk() else: mygui=tk.Toplevel(self.root) 窗口win启动 = True mygui.title = title mygui.protocol('WM_DELETE_WINDOW', close_cmd) # 把点击x关闭窗口变成不要关闭并最小化到托盘 # 设置大小 居中展示 #win.bind("<Configure>", lambda root:win_mouse_release(root)) mygui.resizable(width=if_resize_width, height=if_resize_heigh) mygui.wm_attributes('-topmost', 1) #mygui.geometry(size+ "+" + str(self.root.winfo_x() + self.root.winfo_width()) + "+" + str(self.root.winfo_y())) mygui.geometry(size) tbox = ScrolledText(mygui) #self.eval("文本框"+title) = ScrolledText(self.win) tbox.place(relx=0.01, rely=0.18, relwidth=0.99, relheight=0.8) mygui.mainloop() return mygui,tbox # a,b=400,650 def show_msg_in_toplevel(self): self.win_msg,self.win_msg_tb= self.create_toplevel_win(self.root,"实时解盘","350x670",self.隐藏到任务栏,False,False) if __name__=="__main__": root=tkinterGUI("360x670") root.root_win_add1()
可能是因为notebook控件没有被正确地添加到窗口中。以下是修改后的代码:
import tkinter as tk
import tkinter.font as tkFont
from tkinter.scrolledtext import ScrolledText
root = tk.Tk()
# 创建notebook控件
notebook = tk.ttk.Notebook(root)
# 创建文本框控件
text = ScrolledText(root)
# 将文本框添加到notebook中
notebook.add(text, text="文本框")
# 将notebook添加到窗口中
notebook.pack(expand=True, fill="both")
root.mainloop()
使用 Python 3 和 tkinter 写一个表格处理程序,GUI界面为:2个文本框2个按钮,按钮名称分别叫导入表格、处理表格。当点击导入按钮时,导入要处理的表格,将路径存储到文本框中。点击处理按钮时,遍历第三个工作表到最后一个工作表,获取工作表中第4行开始,依次填入B列和C列,处理完成后在第二个文本框中显示处理完成。
好的,我来帮您解决这个问题。
首先,需要安装 tkinter 库,您可以通过以下命令安装:
```
pip install tkinter
```
然后,您可以使用以下代码实现您的需求:
```python
import tkinter as tk
import pandas as pd
class TableProcessor:
def __init__(self, master):
self.master = master
self.master.geometry('400x150')
self.master.title('表格处理程序')
self.filepath = tk.StringVar()
self.result = tk.StringVar()
self.filepath_label = tk.Label(self.master, text='表格路径:').grid(row=0, column=0)
self.filepath_entry = tk.Entry(self.master, textvariable=self.filepath, width=30).grid(row=0, column=1)
self.import_button = tk.Button(self.master, text='导入表格', command=self.import_table).grid(row=0, column=2)
self.result_label = tk.Label(self.master, text='处理结果:').grid(row=1, column=0)
self.result_entry = tk.Entry(self.master, textvariable=self.result, width=30).grid(row=1, column=1)
self.process_button = tk.Button(self.master, text='处理表格', command=self.process_table).grid(row=1, column=2)
def import_table(self):
filepath = tk.filedialog.askopenfilename()
self.filepath.set(filepath)
def process_table(self):
filepath = self.filepath.get()
if not filepath:
tk.messagebox.showerror('错误', '请先导入表格')
return
try:
df = pd.read_excel(filepath, sheet_name=None, header=None)
except:
tk.messagebox.showerror('错误', '表格读取失败')
return
for sheet_name in df:
sheet = df[sheet_name]
for i in range(3, sheet.shape[0]):
sheet.iloc[i, 1] = sheet.iloc[i, 3]
sheet.iloc[i, 2] = sheet.iloc[i, 3]
df[sheet_name] = sheet
new_filepath = filepath.replace('.xlsx', '_processed.xlsx')
try:
with pd.ExcelWriter(new_filepath) as writer:
for sheet_name in df:
df[sheet_name].to_excel(writer, sheet_name=sheet_name, header=None, index=None)
except:
tk.messagebox.showerror('错误', '表格写入失败')
return
self.result.set('处理完成,结果保存在:{}'.format(new_filepath))
root = tk.Tk()
TableProcessor(root)
root.mainloop()
```
在这段代码中,我们首先创建了一个 `TableProcessor` 类,它继承自 `tkinter.Frame` 类,用于实现表格处理的功能。
在 `__init__` 方法中,我们创建了两个 `StringVar` 类型的变量 `filepath` 和 `result`,用于存储表格路径和处理结果。
然后,我们创建了四个控件:两个标签、两个文本框、两个按钮,分别用于显示标签、输入表格路径、显示处理结果、导入表格、处理表格。
在 `import_table` 方法中,我们使用 `tkinter.filedialog` 模块中的 `askopenfilename` 方法,选择要处理的表格文件,并将其路径存储到 `filepath` 变量中。
在 `process_table` 方法中,我们首先获取 `filepath` 变量中的表格路径,然后使用 pandas 库中的 `read_excel` 方法读取表格数据,并遍历每个工作表中的数据,将第四行开始的第三列数据填入第二列和第三列中。
最后,我们将处理后的表格保存到一个新的文件中,并将文件路径存储到 `result` 变量中。
最后,我们创建一个 `tkinter.Tk` 对象,实例化 `TableProcessor` 类,并调用 `mainloop` 方法运行程序。
这样,就实现了一个简单的表格处理程序。