我遇到以下代码问题。现在我对编程很新,并且大部分代码都是从互联网上复制出来的,我调整它以便按照我想要的方式工作。所以,如果没有简单的方法来解决它,那没关系。也许你可以指出编程或python的一些主题,我应该阅读。
我试着解释一下。我已经定义了函数query(),它对sqlite数据库进行了一些更改。输入是一个列表。如果我单独使用它,该功能就可以正常工作。
现在我正在尝试使用一个接口,我可以在其中定义该列表中应该包含的内容,具体取决于选中的复选框。然后,当我按下按钮时,我想用该特定列表执行该功能。生成的复选框也很好,按钮也是如此。此外,当我选中或取消选中按钮时,它会更新列表,并在解释器中显示新的更新列表。
问题是,该按钮不起作用: 1.它不使用新的更新列表,而是使用空列表() 2.当我输入一个非空的预定义列表时,它会自动运行query(),而不需要我点击按钮。
我可能没有解释清楚,但我希望你能理解我的问题。
感谢您的帮助
`
def chkbox_checked():
for ix, item in enumerate(cb):
opt[ix]=(cb_v[ix].get())
print opt
def query(opt):
import sqlite3
connection = sqlite3.connect("gather.sqlite")
cursor1 = connection.cursor()
cursor1.execute('Drop table IF EXISTS matches')
cursor1.execute('CREATE TABLE matches(date TEXT, team1 TEXT, team2 TEXT, league TEXT)')
cursor1.execute('DELETE FROM "main"."matches"')
for i in range(0, len(opt)):
a=opt[i]
cursor1.execute('INSERT INTO matches (date, team1, team2, league) SELECT * FROM gather WHERE team1=? or team2=? or league=?', (a,a,a,))
cursor1.execute('Drop table IF EXISTS matchessorted')
cursor1.execute('CREATE TABLE matchessorted(date TEXT, team1 TEXT, team2 TEXT, league TEXT)')
cursor1.execute('DELETE FROM "main"."matchessorted"')
cursor1.execute('INSERT INTO matchessorted (date, team1, team2, league) SELECT * FROM matches ORDER BY date')
connection.commit()
import Tkinter as tk
from Tkinter import *
opt = []
root = tk.Tk()
mylist = [
'name1',
'name2',
'name3'
]
cb = []
cb_v = []
for ix, text in enumerate(mylist):
cb_v.append(tk.StringVar())
off_value=0
cb.append(tk.Checkbutton(root, text=text, onvalue=text,offvalue=off_value,
variable=cb_v[ix],
command=chkbox_checked))
cb[ix].grid(row=ix, column=0, sticky='w')
opt.append(off_value)
cb[-1].deselect()
label = tk.Label(root, width=20)
label.grid(row=ix+1, column=0, sticky='w')
button1 = Button(root, text = "Calculate", command = query(opt))
button1.grid(column=1, row=0, sticky=W)
root.mainloop()
`
答案 0 :(得分:0)
关于如何构造代码的几点:您需要编写一个根据您的选择填充列表的函数。它可以返回列表调用'options',当你想在查询中执行代码时,你可以调用构造选项列表的函数。查询函数将具有如下语句:
options = get_options() #assuming the function that populates the options is called get_options
然后执行查询函数的代码。
答案 1 :(得分:0)
button1 = Button(root, text = "Calculate", command = query(opt))
在创建Button之前立即调用query(opt),并将该调用的结果(None)作为命令参数传递给Button构造函数。你真正想要的是一个函数,当被调用时,执行查询(opt)。像这样:
def calculate_clicked():
query(opt)
button1 = Button(root, text = "Calculate", command = calculate_clicked)
或者这个:
button1 = Button(root, text = "Calculate", command = lambda : query(opt))