这是一个非常复杂的问题,我将尽力为您提供所需的数据/代码。任何帮助表示赞赏。
上下文
这是tkinter框架,用户可以将其分配给侦察员徽章。如您所见,它由三个不同的ttk.Treeviews组成。一个包含在MySQL表的标记表中找到的所有标记名称,另一个包含在MySQL数据库的巡检表中找到的所有巡检名称。
选择巡逻后,名称列表会出现在最后一个树形视图中。这些是属于该巡逻队的侦察员。
示例:
为...
问题
按下返回键时,将调用应应使用的功能:
总体效果是,当选择了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
或等效的童军ID。
结果
我现在将带您通过一个例子,以便您更好地理解问题。
如您所见,徽章“ Tracking Badge”已被选择,巡逻“ Panther”已被选择,童军“ Rory Adair”已被选择。我们要给Panther Patrol的Rory Adair跟踪徽章
预期结果:
树形视图中包含“ Rory Adair”的行被删除,其他两个尚未收到徽章的侦察兵则留在树形视图中。
“ Rory Adair”的ScoutID将与badgeID一起添加到ownerbadges表中。
实际结果:
Treeview中的所有行均被删除
所有权徽章表已成功修改,如下所示。
(忽略“已接收”列,因为其目的尚未定义...) (我知道他们没有将行/侦察器名称bck添加到Treeview中的代码,但是在问题解决之前,我无法做到这一点)