问题遇到的现象和发生背景
我在尝试做一个计算器,其中建立了一个combobox.以下是它的代码
from tkinter import *
from tkinter.ttk import *
class WinGUI(Tk):
def __init__(self):
super().__init__()
self.__win()
self.label_frame_feature = Frame_feature(self)
self.level = ""
def get_level(self):
self.level = self.label_frame_feature.select_box_level[1] #用了这个[1],麻烦帮我看一下下
return self.level
def set_level(self,level):
self.level = level
def __win(self):
self.title("Heat Loss Calculator")
----snip----
class Frame_feature(LabelFrame):
def __init__(self,parent):
super().__init__(parent)
self.__frame()
self.select_box_level = self.select_box_level()
----snip----
def select_box_level(self):
self.var = StringVar()
self.cb = Combobox(self, state="readonly",textvariable=self.var)
self.cb['values'] = ("Ground floor","Intermediated level","Top floor")
self.cb.place(x=10, y=40, width=150, height=24)
return self.cb, self.cb.get()
然后我在另一个模块中调用了以上这个类,以下是event.py
rom tkinter import *
from tkinter.ttk import *
from tkinter_helper import WinGUI
class Win():
def __init__(self,win_gui_instance):
self.win_gui = win_gui_instance
self.__event_bind()
#only a pure method
def calc_level(self):
self.level = self.win_gui.get_level()
if self.level == "Intermediated level":
self.level = 0
elif self.level == "Ground floor":
self.level = 1
else:
self.level =0.7 #这里
return self.level
def update_level(self,level):
new_level = self.calc_level()
self.win_gui.set_level(new_level)
return print(self.win_gui.level),
def __event_bind(self):
self.win_gui.button_calcNow.bind('<Button-1>',self.update_level)
root = WinGUI()
win = Win(root)
root.mainloop()
运行结果及详细报错内容
理论上,选combobox不同的内容会有对应的值,但是现在只会返回0.7。也就是说self.win_gui.get_level() 为空,我尝试打印了该值,确认为空。请问为什么会这样呢
0.7
0.7
0.7
[Finished in 4.1s]