我发现这很难研究,因为我不知道这个过程叫什么。顺便说一句,我是在业余时间学习的,没有受过计算机科学的训练,尽管我过去用另一种语言java创建过带有事件处理程序的小型多线程OO应用程序。
编辑-我已经用两个示例模块替换了示例代码,见下文。
上下文
我有一个tkinter应用程序,其中主模块创建自己的窗口,然后从GUI用户可以创建额外的辅助窗口,其中包含影响主模块操作的控件。到目前为止一切顺利,我已经在一个大的python文件中工作了,在同一个模块中创建了几个辅助窗口。**动机:**为了便于管理,我想将其拆分为单独文件中的模块。
问题(我想)
当tkinter应用程序被组织成模块 * 时,辅助模块中的代码不再具有主模块中的代码 * 的可见性,或者在那里创建的对象,例如主应用程序tkinter窗口。
具体目标
举个例子,我如何安排当在辅助窗口中按下一个按钮时,它可以对主模块/中的代码产生影响(甚至是隐藏在该模块中的主窗口类中的代码)。在Python中,什么是正确的语言来描述它?
编辑:
在下面的示例中,按钮按下的结果保持在second_module内。我希望它作为一个事件传播,这样主模块或其窗口类中的任何代码都可以知道它,因此使用了伪方法“well_anything_really()”。
再说一次,虽然一个特定的解决方案是受欢迎的,但从长远来看,我想要的是理解对象(包括tkinter对象)之间这种关系的术语,以便我可以自己查找。* 对我来说,将代码分解成模块是有意义的,尽管我在网上没有看到任何关于如何做到这一点的信息,这似乎很奇怪,因为它看起来很基本,所以我假设我只是没有寻找正确的短语。*
main_module.py:
import tkinter as tk
import second_module
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
master.title("Main window")
second_module.create_secondary_window(tk.Tk())
def well_anything_really(self):
# I want to make any code here benefit from awareness
# of the button press in the secondary window
print("something dependent on that button press")
root = tk.Tk()
root.geometry("500x200")
app = Application(master=root)
app.mainloop()
第二个模块。py:
import tkinter as tk
def create_secondary_window(win0):
win0.title("Secondary window")
button1 = tk.Button(win0,text="Test_button", command=button_response)
button1.grid(column=0,row=0)
def button_response():
print("\nButton response: just a placeholder for any event in the secondary window")
1条答案
按热度按时间e4yzc0pl1#
您可以将函数
well_anything_really
作为参数传递给create_secondary_window()
,并将此函数用作在create_secondary_window()
中创建的按钮的command
选项的值:second_module。派