python - 如何使用按钮将值输入到不同的输入框中?
问题描述
我对 python 非常陌生,我正在尝试制作一个可以跟踪篮球比赛中团队成员统计数据的程序。我对设计没有任何问题,但功能是一个难题,我不确定如何拥有它,以便我可以按下按钮并将正确的积分和统计数据分配给正确的团队成员。
我希望能够选择输入框,然后按其中一个按钮添加点/统计数据或使用菜单功能并让它以这种方式工作。
import sys
from tkinter import *
from tkinter import messagebox
newWindow=Tk()
newWindow.title("Stats")
newWindow.geometry("665x300")
newWindow.configure(bg='light blue')
Label(newWindow, text ="", bg='light blue').grid(row=9, column=1)
twoButton = Button(newWindow,text = '2pt +').grid(row=10, column=3)
threeButton = Button(newWindow,text = '3pt +').grid(row=10, column=4)
assistButton = Button(newWindow,text = 'Assist +').grid(row=10, column=5)
reboundButton = Button(newWindow,text = 'Rebound +').grid(row=10, column=6)
stealButton = Button(newWindow,text = 'Steal +').grid(row=10, column=7)
blockButton = Button(newWindow,text = 'Block +').grid(row=10, column=8)
turnoverButton = Button(newWindow,text = 'Turnover +').grid(row=10, column=9)
Label(newWindow, text ="john:", bg='light blue').grid(row=2, column=1)
Label(newWindow, text ="simon:", bg='light blue').grid(row=3, column=1)
Label(newWindow, text ="joel:", bg='light blue').grid(row=5, column=1)
Label(newWindow, text ="kaur:", bg='light blue').grid(row=6, column=1)
Label(newWindow, text ="genom:", bg='light blue').grid(row=7, column=1)
Label(newWindow, text ="kieran:", bg='light blue').grid(row=8, column=1)
Label(newWindow, text ="2pts:", bg='light blue').grid(row=1, column=2)
Label(newWindow, text ="3pts:", bg='light blue').grid(row=1, column=3)
Label(newWindow, text ="Assists:", bg='light blue').grid(row=1, column=4)
Label(newWindow, text ="Rebounds:", bg='light blue').grid(row=1, column=5)
Label(newWindow, text ="Steals:", bg='light blue').grid(row=1, column=6)
Label(newWindow, text ="Blocks:", bg='light blue').grid(row=1, column=7)
Label(newWindow, text ="Turnovers:", bg='light blue').grid(row=1, column=8)
johnTwoP = Entry(newWindow, width = 2, state = 'readonly').grid(row=2, column=2)
johnThreeP = Entry(newWindow, width = 2, state = 'readonly').grid(row=2, column=3)
johnAssists = Entry(newWindow, width = 2, state = 'readonly').grid(row=2, column=4)
johnRebounds = Entry(newWindow, width = 2, state = 'readonly').grid(row=2, column=5)
johnSteals = Entry(newWindow, width = 2, state = 'readonly').grid(row=2, column=6)
johnBlocks = Entry(newWindow, width = 2, state = 'readonly').grid(row=2, column=7)
johnTO = Entry(newWindow, width = 2, state = 'readonly').grid(row=2, column=8)
simonTwoP = Entry(newWindow, width = 2, state = 'readonly').grid(row=3, column=2)
simonThreeP = Entry(newWindow, width = 2, state = 'readonly').grid(row=3, column=3)
simonAssists = Entry(newWindow, width = 2, state = 'readonly').grid(row=3, column=4)
simonRebounds = Entry(newWindow, width = 2, state = 'readonly').grid(row=3, column=5)
simonSteals = Entry(newWindow, width = 2, state = 'readonly').grid(row=3, column=6)
simonBlocks = Entry(newWindow, width = 2, state = 'readonly').grid(row=3, column=7)
simonTO = Entry(newWindow, width = 2, state = 'readonly').grid(row=3, column=8)
joelTwoP = Entry(newWindow, width = 2, state = 'readonly').grid(row=5, column=2)
joelThreeP = Entry(newWindow, width = 2, state = 'readonly').grid(row=5, column=3)
joelAssists = Entry(newWindow, width = 2, state = 'readonly').grid(row=5, column=4)
joelRebounds = Entry(newWindow, width = 2, state = 'readonly').grid(row=5, column=5)
joelSteals = Entry(newWindow, width = 2, state = 'readonly').grid(row=5, column=6)
joelBlocks = Entry(newWindow, width = 2, state = 'readonly').grid(row=5, column=7)
joelTO = Entry(newWindow, width = 2, state = 'readonly').grid(row=5, column=8)
kaurTwoP = Entry(newWindow, width = 2, state = 'readonly').grid(row=6, column=2)
kaurThreeP = Entry(newWindow, width = 2, state = 'readonly').grid(row=6, column=3)
kaurAssists = Entry(newWindow, width = 2, state = 'readonly').grid(row=6, column=4)
kaurRebounds = Entry(newWindow, width = 2, state = 'readonly').grid(row=6, column=5)
kaurSteals = Entry(newWindow, width = 2, state = 'readonly').grid(row=6, column=6)
kaurBlocks = Entry(newWindow, width = 2, state = 'readonly').grid(row=6, column=7)
kaurTO = Entry(newWindow, width = 2, state = 'readonly').grid(row=6, column=8)
genomTwoP = Entry(newWindow, width = 2, state = 'readonly').grid(row=7, column=2)
genomThreeP = Entry(newWindow, width = 2, state = 'readonly').grid(row=7, column=3)
genomAssists = Entry(newWindow, width = 2, state = 'readonly').grid(row=7, column=4)
genomRebounds = Entry(newWindow, width = 2, state = 'readonly').grid(row=7, column=5)
genomSteals = Entry(newWindow, width = 2, state = 'readonly').grid(row=7, column=6)
genomBlocks = Entry(newWindow, width = 2, state = 'readonly').grid(row=7, column=7)
genomTO = Entry(newWindow, width = 2, state = 'readonly').grid(row=7, column=8)
kieranTwoP = Entry(newWindow, width = 2, state = 'readonly').grid(row=8, column=2)
kieranThreeP = Entry(newWindow, width = 2, state = 'readonly').grid(row=8, column=3)
kieranAssists = Entry(newWindow, width = 2, state = 'readonly').grid(row=8, column=4)
kieranRebounds = Entry(newWindow, width = 2, state = 'readonly').grid(row=8, column=5)
kieranSteals = Entry(newWindow, width = 2, state = 'readonly').grid(row=8, column=6)
kieranBlocks = Entry(newWindow, width = 2, state = 'readonly').grid(row=8, column=7)
kieranTO = Entry(newWindow, width = 2, state = 'readonly').grid(row=8, column=8)
selectPlayer = StringVar()
selectPlayer.set("Player")
menu = OptionMenu(newWindow, selectPlayer,"john", "simon", "joel", "kaur", "genom", "kieran").grid(row=10, column=1)
newWindow.mainloop()
解决方案
创建一个玩家姓名字典,其值为玩家的行号。然后,您可以使用.grid_slaves(row, column)
在该位置获取小部件。
这应该是您增加积分的功能
def addPoints(column):
widget = newWindow.grid_slaves(row=playerDic[selectPlayer.get()], column=column)[0]
currentScore = widget.get()
if currentScore == '':
currentScore = 0
widget['state'] = 'normal'
widget.delete(0, 'end')
widget.insert(0, int(currentScore) + 1)
widget['state'] = 'readonly'
你的选项菜单:
selectPlayer = StringVar()
selectPlayer.set("john")
playerDic = {"john": 2, "simon": 3, "joel": 5, "kaur": 6, "genom": 7, "kieran": 8} # row values
menu = OptionMenu(newWindow, selectPlayer, *playerDic.keys()).grid(row=10, column=1)
并且您的按钮必须传递列号。像这样的东西:
twoButton = Button(newWindow,text = '2pt +', command=lambda :addPoints(2)).grid(row=10, column=3)
threeButton = Button(newWindow,text = '3pt +', command=lambda :addPoints(3)).grid(row=10, column=4)
assistButton = Button(newWindow,text = 'Assist +', command=lambda :addPoints(4)).grid(row=10, column=5)
reboundButton = Button(newWindow,text = 'Rebound +', command=lambda :addPoints(5)).grid(row=10, column=6)
stealButton = Button(newWindow,text = 'Steal +', command=lambda :addPoints(6)).grid(row=10, column=7)
blockButton = Button(newWindow,text = 'Block +', command=lambda :addPoints(7)).grid(row=10, column=8)
turnoverButton = Button(newWindow,text = 'Turnover +', command=lambda :addPoints(8)).grid(row=10, column=9)
注意:如果您更改条目小部件的行或列,请不要忘记更新字典和列号command=lambda :addPoints(column)
附带说明:您还应该知道,您分配的所有变量<widget>.grid()
都是None
因为.grid()
返回None
,所以您的所有变量都几乎没有用。
推荐阅读
- json - jq - 按值排序
- java - 在 Java-8 中生成组合的通用方法
- mysql - 如何在 SQL 查询中设置条件
- c# - 是否有可能(如果可以的话)创建一个可编程的基于节点的流程图(在 Visual Studio 中),就像在 UE4 中那样?
- python - Python 3 在 pdb "b main" 处失败并出现 UnicodeDecodeError?
- c# - 谁序列化/反序列化列表
> 使用 JavaScriptSerializer - reactjs - 在 React 中影响不同组件的状态
- hadoop - 提取 HDFS 文件夹或文件详细信息
- python-3.x - 如何通过 pip 在 windows-10 中为 python 安装 vtk?
- android - android 4.4(kitkat) 及更高版本上不同活动的动画布局