我得到了以下两个python文件:
1:debug.py
import tkinter as tk
from tkinter import scrolledtext
from tkinter import *
from tkinter import ttk
from helper import show_msg
root = Tk()
root.geometry('900x500')
root.resizable(False, False)
root.title("test")
menu = ["elem1", "elem2"]
menu1 = ttk.Combobox(root, state="readonly",values=["choose"] + menu, width=55)
menu1.current(0)
menu1.pack()
menu1.bind("<<ComboboxSelected>>", show_msg(menu1))
debug_frame = tk.Frame(root)
debug_frame.pack()
debug_bar = scrolledtext.ScrolledText(debug_frame, width=100, height=5)
debug_bar.pack()
root.mainloop()
2:helper.py
import tkinter as tk
from debug import debug_bar
def print_msg_on_screen(msg):
debug_bar.insert(tk.INSERT, msg)
print(msg)
def show_msg(menu1):
if(menu1.current() == 0):
msg="choose an element"
print_msg_on_screen(msg)
if (menu1.current() == 1):
msg = "you chose element1"
print_msg_on_screen(msg)
if (menu1.current() == 2):
msg = "you chose element2"
print_msg_on_screen(msg)
我想把我从helper.py的show_msg得到的任何消息打印到我在debug.py中声明的调试栏(在tkinter中(中,但我一直收到这个错误:
ImportError:无法从部分初始化的模块"helper"导入名称"show_msg"(很可能是由于循环导入(
有没有办法使这种循环导入有效?提前谢谢!
最好将debug_bar
传递给show_msg()
(然后传递给print_msg_on_screen()
(,因此无需在helper.py
:中导入debug
调试.py
...
# lambda should be used instead of direct calling show_msg()
menu1.bind("<<ComboboxSelected>>", lambda e: show_msg(menu1, debug_bar))
...
helper.py
import tkinter as tk
def print_msg_on_screen(msg, widget):
widget.insert(tk.INSERT, msg+'n')
print(msg)
def show_msg(menu1, widget):
print(f'{menu1}')
if(menu1.current() == 0):
msg="choose an element"
print_msg_on_screen(msg, widget)
if (menu1.current() == 1):
msg = "you chose element1"
print_msg_on_screen(msg, widget)
if (menu1.current() == 2):
msg = "you chose element2"
print_msg_on_screen(msg, widget)
在定义debug_bar
之前调用show_msg
(show_msg
引用print_msg_on_screen
,后者引用debug_bar
(。
如果你在其他地方没有使用show_msg
和print_msg_on_screen
,我会把它们都移到debug.py
中,然后这样订购:
def print_msg_on_screen(msg):
...
def show_msg(menu1):
...
debug_bar = ...
menu1.bind(..., show_msg(menu1))