这是一个相当复杂的问题,我将尽力为您提供尽可能多的数据/代码。感谢您的帮助。
上下文
这是一个tkinter框架,用户可以为它分配一个徽章给一个侦察兵。如您所见,它由三个不同的ttk.treeviews组成。一个包含在mysql表的badge表中找到的所有badge名称,另一个同样包含在mysql数据库的patrol表中找到的所有patrol名称。
选择巡逻时,最后一个树视图中将显示一个名称列表。这些是属于那个巡逻队的侦察兵。
例子:
作为。。。
问题
当按下返回键时,将调用一个函数,该函数应:
清除包含侦察兵姓名的树视图
通过在owned badges表中创建新行,将徽章分配给scout
将所选巡逻队中尚未收到徽章的所有侦察兵的姓名返回到树视图。
总的效果是,当选中scout并按下return键时,该scout被移除,其他scout留在treeview中。不过,请记住,可以选择多个童子军
以下是按下返回键时执行的功能。
def selectScout():
global SelectedBadgeStr
global SelectedPatrolStr
Values=[]
if SelectedPatrol.get()==("Selected Patrol: Please Select A Patrol"):
tk.messagebox.showerror("ERROR","Please select a Patrol")
return
if SelectedBadge.get()==("Selected Badge: Please Select A Badge"):
tk.messagebox.showerror("ERROR", "Please select a Badge")
return
print(SelectedBadgeStr)
curItems = SelectScoutView.selection()
for i in curItems:
Values.append(SelectScoutView.item(i)['values'])
print(Values)
for i in Values:
print(SelectedBadgeStr)
print(i)
print(i[0])
print(i[1])
print(type(i))
print(type(i[0]))
Test=("Test")
print(repr(i[0]))
GetBadgeID=("SELECT badgeID FROM badges WHERE badgename=%s")
mycursor.execute(GetBadgeID,(SelectedBadgeStr,))
BadgeID=mycursor.fetchone()
print(BadgeID)
GetScoutID=("SELECT scoutID FROM scoutinfo WHERE firstname=%s AND secondname=%s")
mycursor.execute(GetScoutID,(i[0],i[1]))
ScoutID=mycursor.fetchone()
UpdateOwnedBadgesB="INSERT INTO ownedbadges (badgeID,scoutID) VALUES(%s,%s) "
mycursor.execute(UpdateOwnedBadgesB,(BadgeID[0],ScoutID[0]))
mydb.commit()
#Removing Those Who Now Own The Badge
ScoutNameList=[]
Remove = SelectScoutView.get_children()
for child in Remove:
SelectScoutView.delete(child)
print("The Badge:",SelectedBadgeStr,"ID Is",BadgeID[0])
ScoutIDSWhoOwnBadge=("SELECT scoutID FROM ownedbadges WHERE badgeID=%s")
mycursor.execute(ScoutIDSWhoOwnBadge,(BadgeID[0],))
BadgeScoutIDS=mycursor.fetchall()
print("BadgeScoutIDS")
print(BadgeScoutIDS)
for i in BadgeScoutIDS:
print(i)
print(i[0])
print(repr(i[0]))
ScoutNames="SELECT firstname AND secondname FROM scoutinfo WHERE scoutID=%s"
mycursor.execute(ScoutNames,(i[0],))
print("SELECT QUERY RESULTS:")
print(mycursor.fetchall())
Name=mycursor.fetchall()
print("Should Be Names Below:")
print(Name)
ScoutNameList.append(Name)
print(ScoutNameList)
ScoutNamesByPatrol=("SELECT firstname,secondname FROM scoutinfo WHERE patrolID=(SELECT patrolID FROM patrols WHERE patrolname=%s)")
mycursor.execute(ScoutNamesByPatrol,(SelectedPatrolStr,))
ScoutNamedFromPatrol=mycursor.fetchall()
print(ScoutNamedFromPatrol)
print("Done")
return
(我很清楚,这个函数不能满足将数据插入到treeview中的要求)
错误出现在
Name=mycursor.fetchall()
错误:
mysql.connector.errors.InterfaceError: No result set to fetch from.
发生此错误的原因是select查询:
ScoutNames="SELECT firstname AND secondname FROM scoutinfo WHERE scoutID=%s"
mycursor.execute(ScoutNames,(i[0],))
产量:
[(0,)]
而不是童子军的名字和第二个名字。尽管 (i[0],)) = 51
或同等的童子军身份证。
结果
我现在给你举个例子,让你更好地理解这个问题。
你可以看到徽章“追踪徽章”已经被选中,巡逻“豹”已经被选中,侦察“罗里阿达尔”已经被选中。我们想把追踪徽章交给黑豹巡逻队的罗里·阿代尔
预期结果:
树视图中包含“rory adair”的行被删除,剩下两个没有在树视图中收到徽章的其他童子军。
“rory adair”的scoutid将与badgeid一起添加到ownedbadges表中。
实际结果:
树视图中的所有行都将被删除
ownedbadges表已成功修改,如下所示。
(忽略“received”列,因为它的用途还没有定义……(我知道他们没有代码将行/scoutnames bck添加到treeview中,但是在问题解决之前,我不能添加到这个)
暂无答案!
目前还没有任何答案,快来回答吧!