首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ClassA调用ClassB函数以隐藏ClassA小部件

从ClassA调用ClassB函数以隐藏ClassA小部件
EN

Stack Overflow用户
提问于 2019-05-03 20:18:29
回答 1查看 29关注 0票数 0

首先,如果我遗漏了必要的代码,我向您道歉。我是编程的初学者,这是我第一次开发GUI应用程序--我不确定我是否展示了您需要帮助我的内容。

我正在尝试在我的公司开发一个用于数据输入的多窗口GUI应用程序。我一直在使用page来构建页面。我目前有3个页面,分别工作,和各种功能,以导入和保存数据。现在,我正在尝试构建一个函数来隐藏根窗口上的所有小部件,这样我就可以创建/显示一个新的Toplevel,而不显示旧的小部件。

ClassB包含我的根窗口的所有小部件。我正在尝试调用ClassA.main_continue,我想要显示pageC小部件并隐藏所有根/类B小部件。

我收到一个错误“调用Python对象时超过了最大递归深度”。Python在尝试执行标记为“#...1”和“#..2”的代码行之间交替执行,然后返回该错误退出。

我花了10个小时研究和尝试不同的方法来打开新窗口和隐藏旧窗口。我最终会有6-8个窗口,所以我想要一个单独的类,我可以用它来控制它们。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-03 21:00:18

首先,我想在您的代码中解决一些问题。由于self.x不存在,self.x.main_button1.place_forget()将导致错误。您需要首先通过应用self.前缀将x定义为类属性。接下来,您将在按钮上使用pack()place()。您不需要这样做。你只需要使用3个几何图形管理器中的一个。我个人的偏好是grid(),我发现它是我的布局中最容易使用的。实际上,你可以将4行代码减少到该按钮的1行。

如果您打算使用类来构建图形用户界面,我建议您继承Tk()实例和FrameToplevel等Tkinter类。

下面是交换帧的一个非常简单的示例。有很多方法可以做到这一点,但这对你来说应该是一个好的开始。

代码语言:javascript
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55969676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档