用于跟踪单独值的单独按钮[python]

2024-09-27 17:36:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个基本的python程序,用于跟踪本地流氓交易员活动中的子弹射击。我讨厌在我的工作表上写-擦-重写,留下污迹和恶心。这给了我一个练习编码技巧的借口。最终会让它将值保存到一个文件中,然后在启动时读取它们,但那是在将来

我让它询问我有什么枪,为所说的枪设置一个剪辑,然后创建一个引用每把枪的按钮。按下按钮后,fireGun应获取与按下按钮对应的枪射击值。然而,按照目前的运行方式,所有的枪都使用上次输入的“clipSize”相同的弹药量开火

我需要每个按钮跟踪自己的变量,以便在fireGun上更新正确的字典引用

from tkinter import *

addGuns = 'true'
gunList = {}


while (addGuns == 'true'):

    newGun = input("What is the name of your gun? ")
    clipSize = int(input("What is its clip size? "))
    gunList[newGun] = clipSize 
    gunCheck = input("Done adding guns? ")
    if (gunCheck == 'yes'):
        addGuns = 'false'

root = Tk()
root.title("Pew Pew")

def fireGun(x):
    startingAmmo = gunList[x]
    endingAmmo = startingAmmo - 1
    gunList[x] = endingAmmo
    print(gunList[x])
    return

for gun in gunList:
    button = Button(root, text = gun, command = lambda name = gun:fireGun(gun))
    button.pack()

root.mainloop()

Tags: nametrueinputisroot按钮whatpew
1条回答
网友
1楼 · 发布于 2024-09-27 17:36:20

使用partial将参数发送到具有command=call的函数。您还可以使用一个条目来获取枪支信息,每个枪支都有一个标签,标签上有名称和更新的弹药量。一个非常草率的例子(我必须去工作)

from tkinter import *
from functools import partial

gunCheck="no"
gunList = {}

while gunCheck != 'yes':
    newGun = input("What is the name of your gun? ")
    clipSize = int(input("What is its clip size? "))
    gunList[newGun] = int(clipSize)
    gunCheck = input("  ->Done adding guns? ")
##    if (gunCheck == 'yes'):
##        addGuns = 'false'

root = Tk()
root.title("Pew Pew")

def fireGun(x):
    startingAmmo = gunList[x]
    endingAmmo = startingAmmo - 1
    gunList[x] = endingAmmo
    print(gunList[x])
    label_list[x].config(text=x + " >" + str(endingAmmo))
    return

label_list={}
fr=Frame(root)
fr.pack(side="top")
for gun in gunList:
    lab=Label(fr, text="%s  > %d" %(gun, gunList[gun]))
    lab.pack(side=TOP) 
    label_list[gun]=lab
    button = Button(root, text = gun, command = partial(fireGun, gun))
    button.pack()

root.mainloop()

相关问题 更多 >

    热门问题