Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 跟踪变量-组合框Tkinter_Python_Python 3.x_Tkinter_Combobox - Fatal编程技术网

Python 跟踪变量-组合框Tkinter

Python 跟踪变量-组合框Tkinter,python,python-3.x,tkinter,combobox,Python,Python 3.x,Tkinter,Combobox,我正在尝试使用组合框小部件跟踪变量。当我更改组合框值时,会出现以下错误: AttributeError:“StringVar”对象没有属性“\u报告\u异常” 我做错了什么 import tkinter as tk from tkinter import ttk, StringVar class TEST(tk.Frame): def __init__(self, parent): tk.Frame.__init__(self, parent) sel

我正在尝试使用
组合框
小部件跟踪变量。当我更改
组合框
值时,会出现以下错误:

AttributeError:“StringVar”对象没有属性“\u报告\u异常”
我做错了什么

import tkinter as tk
from tkinter import ttk, StringVar

class TEST(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)
        self.parent = parent

        self.estvalue = StringVar()

        self.pestanas = ttk.Notebook(self.parent)
        self.geometria = ttk.Frame(self.pestanas)
        self.viento = ttk.Frame(self.pestanas)
        self.topografia = ttk.Frame(self.pestanas)
        self.pestanas.add(self.geometria, text="Parámetros Globales")
        self.pestanas.add(self.viento, text="Viento")
        self.pestanas.grid(sticky=tk.W, pady=6, padx=6)
        Estructura = ["Edificios",
                      "Chimeneas, Tanques y Estructuras similares",
                      "Carteles llenos",
                      "Carteles abiertos y Estructuras similares"]
        self.Estructura = tk.LabelFrame(self.geometria, text="Estructura",
                                        labelanchor="nw", borderwidth="2",
                                        relief="groove", pady=5, padx=5)
        self.Estructura.grid(column=0, row=0, sticky=tk.W)
        self.Est = ttk.Label(self.Estructura, text="Tipo de Estructura")
        self.Est.grid(column=0, row=0, sticky=tk.W)
        self.Est = ttk.Label(self.Estructura, text="Tipo de Estructura")
        self.Est.grid(column=0, row=1, sticky=tk.W)
        self.boxest = ttk.Combobox(self.Estructura, textvariable=self.estvalue,
                                   state='readonly', width=36)
        self.boxest['values'] = Estructura
        self.boxest.current(0)
        self.boxest.grid(column=1, row=0, sticky=tk.E, padx=5)

        self.estvalue.trace_variable("w",self.eventest())

    def eventest(self):
        if self.estvalue.get() == "Edificios":
            print("foo")
        else:
            print("bar")

def main():
    root = tk.Tk()
    app = TEST(root)
    app.grid()
    root.title("App")
    root.focus_force()
    root.minsize(width=600, height=390)
    root.columnconfigure(0, weight=1)
    root.mainloop()

if __name__ == '__main__':
    main()
必须为跟踪提供对函数的引用。相反,您调用函数并跟踪函数返回的任何内容

像这样设置跟踪(注意缺少的
()


跟踪将向函数传递三个值,因此即使不使用这些参数,也需要修改函数以接受它们。

这还不是全部。必须更改处理程序的定义以接受另外三个参数:
defeventest(self,a,b,c):
。我不确定附加的参数包含什么,但在这种情况下可以忽略它们。@martineau:我在最后一段提到了这个问题。至于它们是什么,请看,对不起,我错过了你答案的那一部分。不管怎样,谢谢你们的链接,谢谢你们。问题依然存在,但这是因为我缺乏知识。@Eduardo:当我做出这两个改变时,问题就消失了。还有什么问题?
self.estvalue.trace_variable("w",self.eventest)