如何将类应用于Tkinter应用程序?

时间:2018-08-27 21:47:09

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

我正在尝试创建一个应用程序,其中在主框架内还有另外两个框架(左右)。

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

我成功地做到了这一点,方法是将每个按钮分配给一个定义,该定义将在左侧框架中重新创建按钮,清除右侧框架中的内容,并重写右侧框架中的内容。

这可行,但是我想学习更多有关不同/更有效的方式的信息。

最近几天,我一直在搜索如何包括课程,这就是我所发现的。

function animate() {
    requestAnimationFrame(animate);
    TWEEN.update();
    renderer.render(scene, camera);
}
animate();

此类有助于创建一个控制器,您可以在其中浏览框架。

我遇到的问题是创建一个始终可见的框架,因为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() 会更改整个窗口的内容。

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

我是编码的完整入门者,所以任何指针都将不胜感激。

1 个答案:

答案 0 :(得分:0)

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)