【问题标题】:How can I apply classes to my Tkinter application?如何将课程应用于我的 Tkinter 应用程序?
【发布时间】:2018-08-27 21:47:09
【问题描述】:

我正在尝试创建一个应用程序,其中在主框架内有两个其他框架(并排)。

左框架由始终可见的按钮组成。这些按钮将更改右框架的内容。

我通过将每个按钮分配给一个定义来成功完成此操作,该定义重新创建左框架中的按钮,清除右框架上的内容并重写进入右框架的内容。

这很有效,但我很想了解更多不同/更有效的方法。

过去几天我一直在寻找如何包含课程,这就是我发现的。

class SeaofBTCapp(tk.Tk):

    def __init__(self, *args, **kwargs):

        tk.Tk.__init__(self, *args, **kwargs)
        container = tk.Frame(self)

        container.pack(side="top", fill="both", expand = True)

        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}

        frame = StartPage(container, self)

        self.frames[StartPage] = frame

        frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame(StartPage)

    def show_frame(self, cont):

        frame = self.frames[cont]
        frame.tkraise()

这个类有助于创建一个控制器,您可以在其中导航框架。

我遇到的问题是创建一个始终可见的框架,因为def show_frame 更改了整个窗口的内容。

我有一个想法可以将这个结构添加到一个名为“RightFrame”的类中,该类不是主窗口,但我不知道如何使框架和按钮相互通信。

我是编码的完整初学者,因此任何指针都将不胜感激。

【问题讨论】:

    标签: python-3.x class tkinter object-oriented-database


    【解决方案1】:

    tkraise() 只是将被调用的小部件带到前面,这意味着它只会更改被调用的小部件所在的窗口部分。

    所有可以更改的框架都在container 中,因此提升任何这些框架只会影响container 所在的窗口部分。因此,您可以在container 旁边放置另一个框架,它不会受到container 内部任何框架变化的影响:

    left_frame = tk.Frame(self)
    left_frame.pack(side="left", fill="both", expand = True)
    container = tk.Frame(self)
    container.pack(side="left", fill="both", expand = True)
    
    label = tk.Label(left_frame, text="This is the left frame", font=self.title_font)
    label.pack(side="top", fill="x", pady=10)
    

    left_frame = LeftFrame(self)
    left_frame.pack(side="left", fill="both", expand = True)
    container = tk.Frame(self)
    container.pack(side="left", fill="both", expand = True)
    
    class LeftFrame(tk.Frame):
    
        def __init__(self, parent):
            tk.Frame.__init__(self, parent)
            label = tk.Label(self, text="This is the left frame", font=parent.title_font)
            label.pack(side="top", fill="x", pady=10)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-28
      • 2020-09-30
      • 1970-01-01
      • 2023-03-16
      • 2019-07-26
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      相关资源
      最近更新 更多