该函数由复选框调用,函数中有append
,取查询sql中的值,加入字典中。
问题是,当我取消选中复选框以及再次选中复选框时,这些值会被添加回字典中,因为append会再次插入这些值,并在每次单击复选框时复制这些值。详细地说,我有一个字典x
,我想在其中添加从查询中获取的row[5]
值score_home
。
问题发生如下:
如果我单击复选框,函数将启动并打印(score_home=[0, 1, 1, 5])
:
Minnesota-Dallas:
Info_Matchs(championship='NHL', date=8.1, round=9, clock='15:00', score_home=[0, 1, 1, 5], score_away=[0, 0, 0, 3])
and other matchs...
稍后,如果我取消选中复选框,函数会再次启动,所以我得到了这样的结果:看score_home
(score_home=[0, 1, 1, 5, 0, 1, 1, 5]
),又添加了一个0,1,1,5:
Minnesota-Dallas:
Info_Matchs(championship='NHL', date=8.1, round=9, clock='15:00', score_home=[0, 1, 1, 5, 0, 1, 1, 5], score_away=[0, 1, 1, 5])
and other matchs...
如果我单击并选中该复选框,就会得到以下结果。再次查看score_home
(score_home=[0, 1, 1, 5, 0, 1, 1, 5, 0, 1, 1, 5,]
),又添加了一个0、1、1、5
Minnesota-Dallas:
Info_Matchs(championship='NHL', date=8.1, round=9, clock='15:00', `score_home=[0, 1, 1, 5, 0, 1, 1, 5, 0, 1, 1, 5,]`, score_away=[0, 0, 0, 3])
and other matchs...
我只想获取输出:家庭评分=[0,1,1,5]
为了避免添加列表,我尝试使用以下代码,但这不是正确的解决方案,因为我还需要重复相同的数字,例如[0,1,1,5]。相反,我编写了以下代码,得到了[0,1,5],这并不好:
if row[5] not in x[row[0]].score_home:
x[row[0]].score_home.append(row[5])
我怎样才能避免每次点击复选框时重复列表呢?例如,我会得到这个score_home=[0, 1, 1, 5]
。谢谢!
代码完成(包含在复选框随后调用的函数中):
def Button1_func():
@dataclass
class Info_Match:
championship: str
date: float
round: int
clock: str
score_home: list[int]
score_away: list[int]
test = {}
db = cursor_test.execute("sql code")
for row in db.fetchall():
if row[0] not in test:
info = Info_Match(
championship=row[1],
date=row[2],
round=row[3],
clock=row[4],
score_home=list(),
score_away=list())
test[row[0]] = info
#PROBLEM IS HERE
test[row[0]].score_home.append(row[5])
print(test)
输出:
Minnesota-Dallas:
Info_Matchs(championship='NHL', date=8.1, round=9, clock='15:00', score_home=[0, 1, 1, 5], score_away=[0, 0, 0, 3])
and other matchs...
更新:添加复选框代码部分
这是复选框的代码。正如@Barmar在聊天中向我指出的那样,也许我的问题出在其他地方,所以我发布了这部分代码。它用于将几个复选框保存在一起,因为在我的项目中,我需要保存这些复选框,以便以后使用if len(datalist) > 0:
。详细地说,我需要几个复选框的组合来获得不同的结果。
datalist = []
Checkbutton1 = tk.IntVar()
Button1 = tk.Checkbutton(root, text = "xxx", variable = Checkbutton1, onvalue = 1, offvalue = 0, height = 1,
bg="white", foreground='black', activebackground="white", highlightthickness = 0,
command=lambda: clicked(Checkbutton1.get(), Button1_func))
Button1.place(x=10, y=30)
def clicked(flag, func):
if flag:
datalist.append(func())
else:
datalist.remove(func())
感谢愿意回答的人!
1条答案
按热度按时间ckx4rj1h1#
也许,您可以向Info_Match示例添加一个追加字段,并且仅在该字段为false时追加。