微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果函数位于单独的 .py 文件中,如何将函数传递给 tkinter 类?

如何解决如果函数位于单独的 .py 文件中,如何将函数传递给 tkinter 类?

我试图在我的“main.py”文件中使用这个“search_pressed()”函数作为一个命令传递到我的 Tk 类中一个名为“main_window.py”的单独文件

但是当我尝试运行代码时,它说:

NameError: name 'tkinter_menu' is not defined

这是我的 main.py 文件中的代码

from main_window import MainMenu

def search_pressed():
    tk_data = tkinter_menu.get_tk_entries()
    print(tk_data)

tkinter_menu = MainMenu(search_pressed)

这是我的 main_window.py 文件中的代码

from tkinter import *

class MainMenu(Tk):
    def __init__(self,search_function):
        super().__init__()
        # Entry:
        self.entry = Entry(self)
        self.entry.grid(row=0,column=0,pady=2.5,columnspan=2)

        # Search Button
        self.search_button = Button(master=self,width=20,text="Search",bg="#53A1DB",command=search_function)
        self.search_button.grid(row=1,pady=5)

        self.mainloop()

    def get_tk_entries(self):
        tk_entry = self.entry.get()

        tk_data = {
            "tk entry": tk_entry,}
        return tk_data

解决方法

问题是 self.mainloop() 永远不会停止,这意味着 MainMenu(...) 仍在运行。这就是变量 tkinter_menu 未定义的原因。

要解决您的问题:

  • self.mainloop()中删除main_window.py
  • 将您的主脚本更改为:
from main_window import MainMenu

def search_pressed():
    tk_data = tkinter_menu.get_tk_entries()
    print(tk_data)

tkinter_menu = MainMenu(search_pressed)
tkinter_menu.mainloop()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。