【问题标题】:Python GUI open a "new page"Python GUI 打开一个“新页面”
【发布时间】:2014-06-30 14:20:38
【问题描述】:

当我按下按钮时,我想打开新的一面。不是新窗口,窗口应该是一样的,只是界面应该改变。

如何在不打开新窗口的情况下解决此问题?

from tkinter import *

page1=Tk()
label1=Label(page1, text="This is page 1")
label1.pack()

def topage2():
    page2=Tk()
    label2=Label(page2, text="This is page 2")
    label2.pack()

button=Button(page1, text="To page 2", command=topage2)
button.pack()

mainloop()

【问题讨论】:

    标签: python user-interface tkinter window


    【解决方案1】:

    您可以在同一个地方创建两个框架,并使用提升和降低方法将它们相互提升(示例取自 Bryan Oakley here 并稍作修改):

    import Tkinter as tk
    
    class SampleApp(tk.Tk):
        def __init__(self, *args, **kwargs):
            tk.Tk.__init__(self, *args, **kwargs)
            self.frame = tk.Frame(self)
            self.frame2 = tk.Frame(self)
            self.frame.place(relwidth=1, relheight=0.8, relx=0, rely=0)
            self.frame2.place(relwidth=1, relheight=0.8, relx=0, rely=0)
            self.label = tk.Label(self.frame, text="Hello, world")
            button1 = tk.Button(self, text="Click to hide label",
                               command=self.hide_label)
            button2 = tk.Button(self, text="Click to show label",
                                command=self.show_label)
            self.label.pack()
            button1.place(relwidth=0.5, relheight=0.15, relx=0.0, rely=0.825)
            button2.place(relwidth=0.5, relheight=0.15, relx=0.5, rely=0.825)
    
        def show_label(self, event=None):
            self.frame.lift(self.frame2)
    
        def hide_label(self, event=None):
            self.frame.lower(self.frame2)
    
    if __name__ == "__main__":
        app = SampleApp()
        app.mainloop()
    

    您可以将“第一页”放在一个框架中,将“第二页”放在另一个框架中

    【讨论】:

    • 还有别的办法吗?
    • 您可以使用pack_forgetgrid_forget(解释为here)一起“撤消”小部件的放置,但我怀疑这将是首选方式。使用多个堆叠框架到底有什么问题?
    猜你喜欢
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多