【发布时间】:2018-04-28 15:38:03
【问题描述】:
我对 python 还很陌生,并尝试按照面向对象的方法构建一个简单的 GUI。因此,我让我的小部件类继承自 tk.Frame 并创建一个应用程序控制器来构建 GUI。
我的应用程序包含以下两个文件:
mainModule.py
# coding: utf8
from testPackage import myGUI
import Tkinter as tk
root = tk.Tk() # Main window
my_gui = myGUI.MainApplication(root)
root.mainloop() # Hold window open until we close it
myGUI.py
# coding: utf8
import Tkinter as tk
# Application initializer
class MainApplication(tk.Frame):
def __init__(self, master):
self.master = master
tk.Frame.__init__(self, master)
self.configure_gui()
self.pack() # <--- CODE IN QUESTION
self.create_widgets()
def configure_gui(self):
self.master.title("Any title")
self.master.geometry('800x600')
self.master.minsize(600, 100)
def create_widgets(self):
self.main_window = MainWindow(self)
self.main_window.pack()
# Main Data Window
class MainWindow(tk.Frame):
def __init__(self, master):
self.master = master
tk.Frame.__init__(self, master)
self.main_window = tk.Label(self, text="This is a test")
self.main_window.pack(side="top", fill="x")
在 MainApplication 类定义中最初运行我的代码时没有 self.pack()(标记为有问题的#Code)只给了我没有标签的根基本窗口从 MainWindow 类创建。
答案可能很简单,但为什么?
我之前使用了一些资源来进入这个主题,其中一些没有使用根窗口上的任何几何管理器(或者我没有经验来查看它。下面的源示例)。
来源:
https://www.begueradj.com/tkinter-best-practices.html
Tkinter example code for multiple windows, why won't buttons load correctly?
只有在阅读以下有关小部件创建的答案后,我才意识到缺少的部分:
Best way to structure a tkinter application
creating a custom widget in tkinter
在初始化时确定 pack() 将与
MainApplication(root).pack(side="top", fill="both", expand=True)
或
Example(root).place(x=0, y=0, relwidth=1, relheight=1)
对于基于网格的布局。
我想这是一个非常简单或明显的元素,我看不到与继承有关,但我不完全确定为什么必须 pack() MainApplication Frame 以及为什么它似乎可以在没有这一步的情况下工作。
【问题讨论】:
-
使用几何管理器就像显示一张您告诉朋友的亲戚的照片。如果您不向他们展示照片,他们仍然会知道自己的品质,但不一定知道他们到底长什么样。
-
感谢您的澄清。只是想我误解了类的继承代码。
标签: python python-2.7 inheritance tkinter