Tkinter 在单独的文件中有页面代码 [英] Tkinter have code for pages in separate files

查看:44
本文介绍了Tkinter 在单独的文件中有页面代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有代码可以打开一个窗口,并且有第 1 页、第 2 页和第 3 页的三个按钮.但是我也有四个 .py 文件(仪表板、PageOne、PageTwo.PageThree).仪表板将是用于运行应用程序的文件.我希望它使每个文件中的代码仅在用户单击相应的页面按钮时运行/显示.

I have code that opens up a window and has three buttons for page 1, page 2, and page 3. However I also have four .py files (Dashboard, PageOne, PageTwo. PageThree). Dashboard will be the file that used to run the application. I want it so that the code from each file is only runs/displayed when the user clicks on the corresponding page button.

仪表板.py:

import Tkinter as tk
import PageOne
import PageTwo
import PageThree

class Page(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
    def show(self):
        self.lift()

class MainView(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
        p1 = Page1(self)
        p2 = Page2(self)
        p3 = Page3(self)

        buttonframe = tk.Frame(self)
        container = tk.Frame(self)
        buttonframe.pack(side="top", fill="x", expand=False)
        container.pack(side="top", fill="both", expand=True)

        p1.place(in_=container, x=0, y=0, relwidth=1, relheight=1)
        p2.place(in_=container, x=0, y=0, relwidth=1, relheight=1)
        p3.place(in_=container, x=0, y=0, relwidth=1, relheight=1)

        b1 = tk.Button(buttonframe, text="Page 1", command=p1.lift)
        b2 = tk.Button(buttonframe, text="Page 2", command=p2.lift)
        b3 = tk.Button(buttonframe, text="Page 3", command=p3.lift)

        b1.pack(side="left")
        b2.pack(side="left")
        b3.pack(side="left")

        p1.show()

if __name__ == "__main__":
    root = tk.Tk()
    main = MainView(root)
    main.pack(side="top", fill="both", expand=True)
    root.wm_geometry("400x400")
    root.mainloop()

PageOne.py:

PageOne.py:

import Tkinter as tk
import Dashboard

class Page1(Page):
   def __init__(self, *args, **kwargs):
       Page.__init__(self, *args, **kwargs)
       label = tk.Label(self, text="This is page 1")
       label.pack(side="top", fill="both", expand=True)

PageTwo.py

import Tkinter as tk
import Dashboard

class Page2(Page):
   def __init__(self, *args, **kwargs):
       Page.__init__(self, *args, **kwargs)
       label = tk.Label(self, text="This is page 2")
       label.pack(side="top", fill="both", expand=True)

PageThree.py:

PageThree.py:

import Tkinter as tk
import Dashboard

class Page3(Page):
   def __init__(self, *args, **kwargs):
       Page.__init__(self, *args, **kwargs)
       label = tk.Label(self, text="This is page 3")
       label.pack(side="top", fill="both", expand=True)

我遇到的错误:

Traceback (most recent call last):
  File "C:\Users\ross.watson\Google Drive\Smart Mirror\Test\Dashboard.py", line 2, in <module>
    import PageOne
  File "C:\Users\ross.watson\Google Drive\Smart Mirror\Test\PageOne.py", line 2, in <module>
    import Dashboard
  File "C:\Users\ross.watson\Google Drive\Smart Mirror\Test\Dashboard.py", line 3, in <module>
    import PageTwo
  File "C:\Users\ross.watson\Google Drive\Smart Mirror\Test\PageTwo.py", line 4, in <module>
    class Page2(Page):
NameError: name 'Page' is not defined

推荐答案

错误消息会告诉您解决问题所需的一切信息.这是一个简单的问题,与 tkinter 无关,与正确组织和使用代码有关.

The error messages tell you everything you need to know in order to fix the problem. This is a simple problem that has nothing to do with tkinter, and everything to do with properly organizing and using your code.

例如,Page is not defined 告诉你什么?从字面上看,它告诉您 Page 未定义.您在主文件中定义了它,但您正在另一个文件中使用它.解决方案是将 Page 的定义移动到一个单独的文件中,该文件可以导入到使用它的文件中.

For example, what is Page is not defined telling you? It's telling you, quite literally, that Page is not defined. You defined it in your main file, but you're using it in another file. The solution is to move the definition of Page to a separate file that can be imported into the files that use it.

将您的文件和导入修改为如下所示:

Modify your files and imports to look like this:

class Page(tk.Frame):
    ...

pageOne.py

from page import Page
class PageOne(Page):
    ...

pageTwo.py

from page import Page
class PageTwo(Page):
    ...

pageThree.py

from page import Page
class PageThree(Page):
    ...

仪表板.py

from pageOne import PageOne
from pageTwo import PageTwo
from pageThree import PageThree
...

这篇关于Tkinter 在单独的文件中有页面代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆