如何使用类在tkinter中显示不同的屏幕

2024-07-01 07:52:22 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的tkinter项目中,我的代码中有两个类,即inputsearch。这两个类各自都工作得很好,并且在它们下面包含一堆子页面,我可以在其中导航。但是我不能在这两个类之间切换。由于我的项目相当大,我在下面以通用代码的形式提供了我的方法

InputOrSearch = False


class Input:   # class 1
    [...]

class Search:   # class 2
    def __init__(self, screen):
        self.screen = screen

    def CheckPage(self, page, optmenu=None):
        if page == 1:
            self.Clear()
            self.search_menu()

    def Clear(self):
        for widget in self.screen.winfo_children():
            widget.destroy()
    [...]


inputscreen = Input(gui)
searchscreen = Search(gui)


def inputorsearch():
    if not InputOrSearch:
        inputscreen.CheckPage(1)
    else:
        searchscreen.CheckPage(1)


while True:
    inputorsearch()

    gui.mainloop()

这就是我使用的方法,尽管这正确地导致了Input,但出于某种原因,它似乎不适用于Search


Tags: 项目方法代码selfinputsearchifdef
1条回答
网友
1楼 · 发布于 2024-07-01 07:52:22

最简单的解决方案是使每个类都成为Frame的子类。然后,通过销毁一个实例并创建另一个实例,或者在启动时创建所有实例,然后隐藏一个实例并显示另一个实例,可以轻松地在它们之间切换

import tkinter as tk

class Input(tk.Frame):
    def __init__(self, parent):
        super().__init__(parent)
        label = tk.Label(self, text="I am Input.")
        label.pack(side="top", fill="both", expand=True)

class Search(tk.Frame):
    def __init__(self, parent):
        super().__init__(parent)
        label = tk.Label(self, text="I am Search.")
        label.pack(side="top", fill="both", expand=True)

def inputorsearch():
    if not InputOrSearch:
        searchscreen.pack_forget()
        inputscreen.pack(fill="both", expand=True)
    else:
        inputscreen.pack_forget()
        searchscreen.pack(fill="both", expand=True)


gui = tk.Tk()
inputscreen = Input(gui)
searchscreen = Search(gui)

InputOrSearch = True
inputorsearch()

gui.mainloop()

相关问题 更多 >

    热门问题