每次按下按钮时更改标签的文字

时间:2017-09-16 01:39:22

标签: python-3.x for-loop button tkinter label

我在TKINTER中使用FOR进行PYTHON表,我希望每次在ENTRY中放置一个新数字时,标签都会更改为新表。例如,一个数字将被放置在ENTRY中,该人将点击TAB按钮,当它被点击时,表格将出现,但如果该人想要另一个号码,然后再次点击,新表格将从前一个。我的解决方案是创建一个删除前一个表的按钮,但是当按下该按钮时,只删除最后一个乘法。我想知道如何点击tabuada按钮,前一个按钮删除新的按钮而不使用另一个按钮。获取下面的代码和照片,谢谢。视频:第一张照片显示重置按钮工作,但它只删除最后一次乘法,第二张照片显示整个乘法。

from tkinter import *
import tkinter as tk

win=tk.Tk()
win.title('Table')
lb=Label(win,text='Type a number:',font='Helvetica 12 bold')
lb.pack()
e=Entry(win)
e.pack()

def click():
   global c
   c=e.get()
   print('requested number ',c)

for b in (range(0, 11)):
   global lb2
   lb2=Label(text='{} x {} = {} '.format(c, b, int(b)*int(c)))
   lb2.pack()

def reset():
   lb2['text'] = ' '

bt1=Button(win,text='GO',bg='lightblue',command=click)
bt1.pack()
bt2=Button(win,text='RESET',bg='lightblue',command=reset)   
bt2.pack()
win.mainloop()

擦除:

erasing

整个乘法:

whole multiplication

1 个答案:

答案 0 :(得分:0)

以下是您的代码的一些修复程序;它并不完全清楚你的意思是什么:"新表将从前一个表中删除。" ,所以我选择使用新表取代之前的表

您的代码中未定义

c并且引发了异常 我将标签的构造放在从make_label块和main调用的函数click()中,以便在请求新号码时重建它。 reset错过了对标签上pack的调用,以更新显示的文字。

我认为这应该可以帮助你开始正确的方向;如果有什么不清楚,请告诉我。

编辑:

我修改了reset,因此标签被销毁并从视图中重新创建,从而消除了窗口大小的增长。

from tkinter import *
import tkinter as tk

win=tk.Tk()
win.title('Table')
lb=Label(win,text='Type a number:',font='Helvetica 12 bold')
lb.grid(row=0, column=0)
lb2 = Label(text='')
e=Entry(win)
e.grid(row=1, column=0)
c = 2

def click():
    global c
    c = e.get()
    print('requested number ', c)
    reset()
    make_label(c)

def make_label(c):
    global lb2
    txt = []
    for b in (range(0, 11)):
        txt.append('{} x {} = {} '.format(c, b, int(b)*int(c)))
    text = '\n'.join(txt)
    lb2 = Label(text=text)
    lb2.grid(row=4, column=0)

def reset():
    global lb2
    lb2.destroy()
    lb2 = Label()
    lb2.grid(row=4, column=0)

make_label(c)

bt1=Button(win,text='GO',bg='lightblue',command=click)
bt1.grid(row=2, column=0)
bt2=Button(win,text='RESET',bg='lightblue',command=reset)   
bt2.grid(row=3, column=0)
win.mainloop()