如何从另一个类文件加载另一个tkinter框架? Python tkinter

时间:2018-01-08 22:50:24

标签: python oop tkinter

import tkinter as tk
from PageTwoFile import PageTwoClass

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 = {}

    for F in (StartPage, PageOne, PageTwo):
        frame = F(container, self)
        self.frames[F] = frame
        frame.grid(row=0, column=0, sticky="nsew")
        frame.grid(row=110, column=110, sticky="nsew")

    self.show_frame(StartPage)

def show_frame(self, cont):

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

def qf(param):
  print(param)


class StartPage(tk.Frame):

def __init__(self, parent, controller):
    tk.Frame.__init__(self,parent)

    label = tk.Label(self, text="Start Page", font=LARGE_FONT)
    label.pack(pady=10,padx=10)

    button1 = tk.Button(self, text="Visit Page 1",
                        command=lambda: controller.show_frame(PageOne))
    button1.pack()

    button1 = tk.Button(self, text="Visit Page 2",
                        command=lambda: controller.show_frame(PageTwo))
    button1.pack()

class PageOne(tk.Frame):

def __init__(self, parent,controller):
    tk.Frame.__init__(self,parent)
    label = tk.Label(self, text="Page One", font=LARGE_FONT)
    label.pack(pady=10,padx=10)

    button1 = tk.Button(self, text="Back to home",
                        command=lambda: controller.show_frame(StartPage))
    button1.pack()

    button2 = tk.Button(self, text="Two",
                        command=lambda: controller.show_frame(PageTwo))
    button2.pack()


 app = SeaofBTCapp()
 app.mainloop()

在这个例子中,我有一个与PageOne类似但在另一个文件中的类。

class PageTwoClass(tk.Frame):

def __init__(self, parent,controller):
    tk.Frame.__init__(self,parent)
    label = tk.Label(self, text="Page Two", font=LARGE_FONT)
    label.pack(pady=10,padx=10)

    button1 = tk.Button(self, text="Back to home",
                        command=lambda: controller.show_frame(StartPage))
    button1.pack()

    button2 = tk.Button(self, text="Page One",
                        command=lambda: controller.show_frame(PageOne))
    button2.pack()

我可以运行得很好,但是当我去PageTwo时,我无法回到PageOne,我得到了:

NameError: name 'PageOne' is not defined

我认为这是进入PageTwoFile并且不知道如何回来。如何让它读到一切?

我正在开发银行系统,我有另一个文件(客户,帐户),这些文件在主文件中导入。如果我想在访问框架时更改它们,我需要它们返回...

1 个答案:

答案 0 :(得分:1)

解决方案是使用类的名称而不是实际的类本身,这样不同的类就不必相互导入。

您开始使用的代码的更好版本,以及使用页面名称而非页面类的修改,位于:https://stackoverflow.com/a/7557028/7432