翟小麦 2023-01-26 19:38 采纳率: 75%
浏览 61
已结题

关于tkinter combobox取值的问题

问题遇到的现象和发生背景

我在尝试做一个计算器,其中建立了一个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]
  • 写回答

4条回答 默认 最新

  • 阳光宅男xxb 2023-01-26 19:51
    关注

    估计你获取combbox的取值方法不对啊。

    def selection(event):
        # combobox的三种取值方法
        print(event.widget.get())
        print(combo.get())
        print(combo_var.get())
    combo = ttk.Combobox(root, values=values, textvariable=combo_var)
    combo.pack()
    combo.bind("<<ComboboxSelected>>",  selection)
    

    所以你那里要修改为
    self.level=...(select_box_level()[0]).get()

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月3日
  • 已采纳回答 1月26日
  • 创建了问题 1月26日

悬赏问题

  • ¥15 r语言神经网络自变量重要性分析
  • ¥15 基于双目测规则物体尺寸
  • ¥15 wegame打不开英雄联盟
  • ¥15 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)
  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢