Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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 ttk.Combobox-单击时不显示下拉框_Python_Python 3.x_Tkinter_Combobox_Ttk - Fatal编程技术网

Python ttk.Combobox-单击时不显示下拉框

Python ttk.Combobox-单击时不显示下拉框,python,python-3.x,tkinter,combobox,ttk,Python,Python 3.x,Tkinter,Combobox,Ttk,我正在制作一个Tkinter应用程序,它应该创建一系列组合框,并使用Sqlite数据库中的元素填充它们。但是,即使为每个组合框填充了values属性,一旦应用程序实际启动,也无法显示下拉菜单或与框交互 我可以在启动主循环之前设置Combobox.current()索引,从而显示该索引处的值,但一旦主循环启动,就根本无法与该框交互。我确实尝试使用后命令回调来填充列表,但得到了相同的结果。我在这个过程中没有出错 注意:下面的代码中编码了示例数据以替换DB查询。这不会改变我的结果 从tkinter导入

我正在制作一个Tkinter应用程序,它应该创建一系列组合框,并使用Sqlite数据库中的元素填充它们。但是,即使为每个组合框填充了values属性,一旦应用程序实际启动,也无法显示下拉菜单或与框交互

我可以在启动主循环之前设置Combobox.current()索引,从而显示该索引处的值,但一旦主循环启动,就根本无法与该框交互。我确实尝试使用后命令回调来填充列表,但得到了相同的结果。我在这个过程中没有出错

注意:下面的代码中编码了示例数据以替换DB查询。这不会改变我的结果

从tkinter导入*
将tkinter.ttk导入为ttk
类别PCFrame(框架):
定义初始(自我,主):
self.master=master
super()。\uuuu init\uuuu(master=master)
self.columnconfigure(0,minsize=100,weight=1)
self.columnconfigure(1,minsize=300,weight=3)
self.grid()
self.widgets={}
self.pc_fieldnames=[“计算机名”,
“客户名称”,
“连载”,
“模型”]
self.init_ui()
def初始用户界面(自身):
label_opts={“column”:0,“sticky”:W}
字段_opts={“列”:1,“粘性”:E+W}
对于rownum,我在enumerate(self.pc_字段名)中输入:
#回拨未更改我的结果的后命令
def字段显示处理程序(self=self,fieldname=i):
返回自我字段\显示(字段名称)
self.widgets[i]={}
self.widgets[i][“NewValue”]=StringVar(self,
值=无)
#此处的值的格式为(行值、行序列号)
#Combobox将始终显示中的第一项
#每个元组
self.widgets[i][“ValueTuples”]=[]
self.widgets[i][“Field”]=ttk.Combobox(self,class=“PCField”,
textvariable=self.widgets[i][“NewValue”],
state=“normal”,
postcommand=字段\显示\处理程序,
值=[])
self.widgets[i][“Field”].rowname=i
self.widgets[i][“Field”].grid(row=rownum,**Field_opts)
self.widgets[i][“Label”]=ttk.Label(self,text=i.capitalize())
self.widgets[i][“Label”].rowname=i
self.widgets[i][“Label”].grid(row=rownum,**Label\u opts)
self.populate()
对于self.pc_字段名中的i:
自我现场显示(一)
self.widgets[i][“字段”].current(newindex=0)
定义填充(self,search_column=None,search_criteria=None,
行=无):
如果行==无:
#这里的测试值通常会在这里使用DB查询
行=[]
对于范围(5)中的i:
行。追加({})
对于self.pc_字段名中的j:
行[i][j]=j+“”+str(i)
#重新初始化,然后填充所有字段
对于self.widgets.items()中的k,w:
w[“ValueTuples”]=[]
对于行中的行:
对于第行中的键。键():
k=键。下()
条目=第[k]行,如果第[k]行!=没有其他人“
尝试:
self.widgets[k][“ValueTuples”].append(
(条目,第[“序列”]行)
除KeyError外:
如果k不在self.pc_字段名中:
通过
其他:
提升
def field_显示器(自身、字段名称):
显示=[]
对于self.widgets[fieldname][“ValueTuples”]中的i:
display.append(i[0])
self.widgets[fieldname][“Field”][“values”]=display
如果名称=“\uuuuu main\uuuuuuuu”:
root=Tk()
frame=PCFrame(根)
root.mainloop()

问题在于您正在更改组合框的类。这将有效地删除combobox的所有内置行为,因为默认绑定绑定到小部件的原始类名


您需要从组合框的定义中删除
class=“PCField”
,或者准备添加所需的所有绑定

如果您的示例不需要数据库,则会有所帮助。我建议您硬编码一些示例数据。完成。值得一提的是,我用硬编码的数据进行了测试,结果并没有变化。创建最小的工作代码,我们可以运行它来发现问题。您应该在代码中添加一些数据,这样我们就可以在没有数据库的情况下运行它。我们不知道数据库中有什么。为了澄清,我在代码中插入了示例数据,之前有人建议我这样做。这里的代码确实有点长,但我觉得包含所有三个相关函数是很重要的。“这里的代码……有点长”:您的代码不太长,不是很长,需要更清晰。使用name
i
表示
fieldname
令人困惑,说明了
callback
和no
command=
set。