【问题标题】:how to pass call value from callback function in tkinter如何从tkinter中的回调函数传递调用值
【发布时间】:2021-02-05 19:10:48
【问题描述】:

我写了这段代码,我想使用的值

class saveselectvalue():
    def docallback(self , *args):
    value = combo.get()
    return value

root=tk.Tk()

root.title('Testing Tkinter Combobox With Sqllite')
root.geometry('500x600+150+80')

frame1 =tk.Frame(root, width=500, height=75, background="blue")
frame1.pack_propagate(False)
frame1.pack()

frame2 =tk.Frame(root, width=500, height=90, background="blue")
frame2.pack_propagate(False)
frame2.place(x=0 , y=77)

frame3 =tk.Frame(root, width=500, height=180, background="white")
frame3.pack_propagate(False)
frame3.place(x=0 , y=170)

combo=ttk.Combobox(frame1,width=15 , height=10 )
combo.place(x=300 , y=8)
df=sqltablename()
combo['values']=df.to_string(header=None , index=False)
valueselected=combo.bind("<<ComboboxSelected>>", saveselectvalue.docallback)
...
...
tree=ttk.Treeview(frame3)
tree.place(x=10 , y =0)
root.mainloop()

我想选择在组合框中选择的数据并使用它从 sqlite 数据库中查询如下代码

con=sqlite3.connect('foo.db')
c = con.cursor()
d=combobbox selected value
df = pd.read_sql_query("SELECT * FROM  {};".format(d),con)

谁能帮我做这件事? 最好的问候

【问题讨论】:

  • 为什么不直接在查询任务中调用combo.get()

标签: python sqlite tkinter callback


【解决方案1】:

你需要存储这个值,一种方法是在你的类SaveSelectValue中创建一个属性:

class SaveSelectValue():
  def __init__(self):
    self.value = None 

那么你的回调必须保存值:

def docallback(self , *args):
  value = combo.get()
  self.value = value

要绑定回调,首先创建一个类的实例,然后使用它来绑定:

instanceSaveSelectValue = SaveSelectValue()
combo.bind("<<ComboboxSelected>>", instanceSaveSelectValue.docallback)

现在你可以随意使用属性了:

print(instanceSaveSelectValue.value)

【讨论】:

  • 非常感谢,当我想使用 SaveSelectValue.docallback() 它显示 TypeError: docallback() missing 1 required positional argument: 'self' 。你能回答我想做什么吗?
  • 你不能直接调用SaveSelectValue,因为这样调用你是在尝试使用类方法,你应该先实例化一个新对象,比如:instanceSaveSelectValue = SaveSelectValue() 然后你可以使用instanceSaveSelectValue.docallback()
  • 如果你有问题,可以考虑搜索面向对象编程,我所说的都是与它相关的,但请随时提问,我会尽可能回答。如果答案对您有用,请考虑将其标记为答案。
猜你喜欢
  • 2022-08-17
  • 1970-01-01
  • 2015-11-26
  • 2013-06-06
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 2019-06-19
相关资源
最近更新 更多