首先,如果我遗漏了必要的代码,我向您道歉。我是编程的初学者,这是我第一次开发GUI应用程序--我不确定我是否展示了您需要帮助我的内容。
我正在尝试在我的公司开发一个用于数据输入的多窗口GUI应用程序。我一直在使用page来构建页面。我目前有3个页面,分别工作,和各种功能,以导入和保存数据。现在,我正在尝试构建一个函数来隐藏根窗口上的所有小部件,这样我就可以创建/显示一个新的Toplevel,而不显示旧的小部件。
ClassB包含我的根窗口的所有小部件。我正在尝试调用ClassA.main_continue,我想要显示pageC小部件并隐藏所有根/类B小部件。
我收到一个错误“调用Python对象时超过了最大递归深度”。Python在尝试执行标记为“#...1”和“#..2”的代码行之间交替执行,然后返回该错误退出。
我花了10个小时研究和尝试不同的方法来打开新窗口和隐藏旧窗口。我最终会有6-8个窗口,所以我想要一个单独的类,我可以用它来控制它们。
import tkinter as tk
root = tk.Tk()
top = ClassB (root)
class ClassA: #class that contains functions to control program/do tasks
def main_continue(self, top):
ClassC(root)
x = ClassB(top) ################################## 1
self.x.main_button1.place_forget()
class ClassB: #root window
def __init__(self, top=None):
y = ClassA()
self.main_button1 = tk.Button(top, command= y.main_continue(top)) ######################2
self.main_button1.pack()
self.main_button1.place(relx=0.383, rely=0.5, height=24, width=140)
self.main_button1.configure(text='''Continue''')
class ClassC: #2nd page
def __init__(self, top=None):
## code for a different page of widgets发布于 2019-05-03 21:00:18
首先,我想在您的代码中解决一些问题。由于self.x不存在,self.x.main_button1.place_forget()将导致错误。您需要首先通过应用self.前缀将x定义为类属性。接下来,您将在按钮上使用pack()和place()。您不需要这样做。你只需要使用3个几何图形管理器中的一个。我个人的偏好是grid(),我发现它是我的布局中最容易使用的。实际上,你可以将4行代码减少到该按钮的1行。
如果您打算使用类来构建图形用户界面,我建议您继承Tk()实例和Frame或Toplevel等Tkinter类。
下面是交换帧的一个非常简单的示例。有很多方法可以做到这一点,但这对你来说应该是一个好的开始。
import tkinter as tk
root = tk.Tk()
main_page = tk.Frame(root)
main_page.grid(row=0, column=0)
second_page = tk.Frame(root)
def show_main_page():
second_page.grid_forget()
main_page.grid(row=0, column=0)
def show_second_page():
main_page.grid_forget()
second_page.grid(row=0, column=0)
tk.Button(main_page, text='Show 2nd page', command=show_second_page).grid(row=0, column=0)
tk.Button(second_page, text='Show Main page', command=show_main_page).grid(row=0, column=0)
root.mainloop()https://stackoverflow.com/questions/55969676
复制相似问题