python - Python:以OO方式呈现的tkinter窗口
问题描述
我一直在尝试以 OO 方式表示 tkinter 窗口。这里的答案很少,我已经设法生成了一个工作代码,但我根本不明白它为什么工作。
import tkinter as tk
class CurrConv:
def __init__(self, window, date):
self.window = window
window.title("Currency Converter")
window.geometry("350x150+300+300")
self.label = tk.Label(text="Date: {}\n".format(date))
self.label.pack()
self.text_box = tk.Text()
self.text_box.insert("2.0", "100 is: {}\n".format(100))
self.text_box.insert("3.0", "24 is: {}".format(24))
self.text_box.pack()
self.button = tk.Button(text="Quit", width=8, command=window.quit)
self.button.place(relx=0.5, rely=0.9, anchor="center",)
def main():
window = tk.Tk()
app = CurrConv(window, 1234)
window.mainloop()
if __name__ == "__main__":
main()
我不明白的是“app”对象的用法。它在任何地方都没有使用,通常当我们创建一个对象(在任何编程语言中)时,我们都会对其调用某些操作。然而,在这里我们对 app 对象什么也不做。类封装似乎间接修改了“窗口”,这至少可以说是令人困惑的。
接下来,我不明白标签和文本框是如何添加到“window”中的,当在代码中我没有在“window”中创建它们时,我在“self”上创建它们,这将是“app”,这不是使用时间更长。
底线是,由于上述原因,我不明白上面的代码是如何工作的。
提前致谢。我希望我足够清楚。
解决方案
对于第一个问题,yesapp
是一个对象。但它是类的一个实例CurrConv
。当您初始化一个类时,您调用该类的__init__
方法,在这种情况下,您执行该方法中的语句:修改窗口(您在创建时作为参数传递app
)并向其添加小部件。所以虽然app
没有直接使用,但它在创建时有做那些事情的副作用。由于这个原因,由于您只需要初始化方法,因此不需要分配给变量,您可以将其设为CurrConv(window, 1234)
.
对于第二个,是的,您在创建小部件时没有提及window
,但是当未指定新 Tkinter 小部件的主控时,它将主主控(根,使用 创建tk.Tk()
)作为它的主控。
推荐阅读
- php - {Laravel} 如何显示徽章到达消息?qcod/laravel-gamify
- postgresql - 如何在 Postgres PL/pgSQL 中选择复合类型数组到局部变量中?
- javascript - 打字稿:类不从接口继承类型?
- r - 根据过滤的数据分配 geom_hline 值,并将其作为同一代码块的一部分?
- regex - 如何强制将子域重定向到“https://www.”?
- java - 如何从简单列表视图的按钮打开新活动
- autohotkey - 将 Autohotkey WinActivate 添加到 ControlSend
- macos - 如何获取 macOS 用于未知文件、文件夹、应用程序等的通用图标?
- javascript - Vue.js 计算属性:[Vue 警告]:渲染错误:“TypeError:无法读取未定义的属性‘userId’”
- huggingface-transformers - 拥抱脸变压器 run_clm.py 提前停止