首页 > 解决方案 > 如果函数位于单独的 .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, column=0, pady=5)

        self.mainloop()

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

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

标签: pythonpython-3.xooptkintertk

解决方案


问题是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()

推荐阅读