gpt4 book ai didi

python-3.x - 如何对标签或按钮进行永久性条目更改

转载 作者:行者123 更新时间:2023-12-03 16:55:55 25 4
gpt4 key购买 nike

我制作了一个示例程序,说明它的一般情况。我的目标是让数据条目永久写入按钮,这样如果我再次运行该程序,它就会更新当前价格。

from tkinter import*
import tkinter as tk
import tkinter.simpledialog

def changeP1(event):
btnT4=tk.Button(root,text='Updating...',width=10,bg='green')
btnT4.grid(in_=root,row=1,column=2)
btnT4.bind('<1>',changeP1)
askC1=tk.simpledialog.askfloat('Updating...','What is the current price?')
btnT4=tk.Button(root,text=('RM {:,.2f}'.format(askC1)),width=10)
btnT4.grid(in_=root,row=1,column=2)
btnT4.bind('<1>',changeP1)
def changeP2(event):
btnT4=tk.Button(root,text='Updating...',width=10,bg='green')
btnT4.grid(in_=root,row=2,column=2)
btnT4.bind('<1>',changeP2)
askC2=tk.simpledialog.askfloat('Updating...','What is the current price?')
btnT4=tk.Button(root,text=('RM {:,.2f}'.format(askC2)),width=10)
btnT4.grid(in_=root,row=2,column=2)
btnT4.bind('<1>',changeP2)
def changeP3(event):
btnT4=tk.Button(root,text='Updating...',width=10,bg='green')
btnT4.grid(in_=root,row=3,column=2)
btnT4.bind('<1>',changeP3)
askC3=tk.simpledialog.askfloat('Updating...','What is the current price?')
btnT4=tk.Button(root,text=('RM {:,.2f}'.format(askC3)),width=10)
btnT4.grid(in_=root,row=3,column=2)
btnT4.bind('<1>',changeP3)

root=Tk()
Title=['Item','Unit','Price']
Item=['Kopi O','Teh O','Teh Tarik']
Unit= '1 cup'
Price=[1,0.9,1.2]
cl=[0,1,2]
rw=[1,2,3]

for i in range(3):
btnT1=tk.Button(root,text=Title[i],width=10,bg='yellow')
btnT1.grid(in_=root,row=0,column=cl[i])

for x in range(3):
btnT2=tk.Button(root,text=Item[x],width=10)
btnT2.grid(in_=root,row=rw[x],column=0)

for y in range(3):
btnT3=tk.Button(root,text=Unit,width=10)
btnT3.grid(in_=root,row=rw[y],column=1)

for z in range(3):
btnT4=tk.Button(root,text=('RM {:,.2f}'.format(Price[z])),width=10)
btnT4.grid(in_=root,row=rw[z],column=2)
if z in range(0,1):
btnT4.bind('<1>',changeP1)
if z in range(1,2):
btnT4.bind('<1>',changeP2)
if z in range(2,3):
btnT4.bind('<1>',changeP3)

root.mainloop()

如果有办法让这个更简单......

最佳答案

您有 2 个选项(据我所知),因为您正在动态创建按钮。这两个选项只需要一个功能。

如果您想使用 bind然后您可以使用 event.widget 获取选定的小部件

def onChange(event):
ans = tk.simpledialog.askfloat('Updating...','What is the current price?')
if ans: # checks if None is returned when clicking cancel
event.widget.config(text='RM {:,.2f}'.format(ans))

所以在你的循环中你只有一个绑定(bind) btnT4.bind('<1>', onChange) .

或者使用按钮的 command 属性来指定按下按钮时要调用的函数。对按钮使用命令通常比绑定(bind)更 pythonic。

这还需要您创建一个列表来存储按钮,让函数知道要更改哪个小部件。

btn_list = [] # create an empty list for the buttons

# Your for loop will look like this the command parameter instead
# and append the button to the list
for z in range(3):
btnT4=tk.Button(root,text=('RM {:,.2f}'.format(Price[z])),width=10,\
command=lambda i=z: onChange(i))
btnT4.grid(in_=root,row=rw[z],column=2)
btn_list.append(btnT4)

lambda将传递 z 的值进入onChange函数为该按钮创建一个唯一的调用。 'z'的值是相对于按钮在列表中的索引位置。

onChange调用函数时将请求新输入,如果有效,将使用索引更新存储在列表中的按钮对象。

# Your change function will look like this
def onChange(i):
ans = tk.simpledialog.askfloat('Updating...','What is the current price?')
if ans:
btn_list[i].config(text='RM {:,.2f}'.format(ans))

关于python-3.x - 如何对标签或按钮进行永久性条目更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34259905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com