为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 tkinter 中添加第二行?

如何在 tkinter 中添加第二行?

Helenr 2023-08-08 17:21:28
我需要使用计算函数将第二行添加到与第一行相同的位置。这段代码该怎么做import tkinter as tkroot = tk.Tk()root.geometry('850x450')var1 = tk.StringVar()t1 = tk.Entry(root, textvariable=var1).grid(row=1,column=1)var2 = tk.StringVar()t2 = tk.Entry(root, textvariable=var2).grid(row=1,column=2)result = tk.StringVar()l = tk.Label(root, textvariable=result).grid(row=1,column=3)N = 3 # number of decimals that you wantdef set_label(name, index, mode):    if var1.get() == '' or var2.get() == '':        pass    else:        res = float(var1.get()) * float(var2.get())        result.set('{number:.{digits}f}'.format(number=res, digits=N))var1.trace('w', set_label)var2.trace('w', set_label)root.mainloop()提前致谢...
查看完整描述

2 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

如果要创建多行小部件,可以创建一个数组来存储小部件引用,并使用循环在网格中创建小部件。


import tkinter as tk


root = tk.Tk()

root.geometry('850x450')


lstentry = []  # all entries

lstlabel = []  # all labels


for ctr in range(5):   # 5 rows

    var1 = tk.StringVar()

    t1 = tk.Entry(root, textvariable=var1).grid(row=ctr+1,column=1)

    var2 = tk.StringVar()

    t2 = tk.Entry(root, textvariable=var2).grid(row=ctr+1,column=2)

    result = tk.StringVar()

    result.set('label ' +str(ctr+1))

    l = tk.Label(root, textvariable=result).grid(row=ctr+1,column=3)

    lstentry.append(var1)

    lstentry.append(var2)

    lstlabel.append(l)


N = 3 # number of decimals that you want

def set_label(name, index, mode):

    if var1.get() == '' or var2.get() == '':

        pass

    else:

        res = float(var1.get()) * float(var2.get())

        result.set('{number:.{digits}f}'.format(number=res, digits=N))


var1.trace('w', set_label)

var2.trace('w', set_label)


root.mainloop()

输出

https://img1.sycdn.imooc.com//64d2093b000192b803130160.jpg

查看完整回答
反对 回复 2023-08-08
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

将行创建逻辑与功能分开add_row(row_number):


import tkinter as tk


root = tk.Tk()

root.geometry('850x450')


def add_row(row_number):

    var1 = tk.StringVar()

    t1 = tk.Entry(root, textvariable=var1).grid(row=row_number,column=1)

    var2 = tk.StringVar()

    t2 = tk.Entry(root, textvariable=var2).grid(row=row_number,column=2)

    result = tk.StringVar()

    l = tk.Label(root, textvariable=result).grid(row=row_number,column=3)


    N = 3 # number of decimals that you want

    def set_label(name, index, mode):

        if var1.get() == '' or var2.get() == '':

            pass

        else:

            res = float(var1.get()) * float(var2.get())

            result.set('{number:.{digits}f}'.format(number=res, digits=N))


    var1.trace('w', set_label)

    var2.trace('w', set_label)


NUMBER_OF_ROWS = 10

for row_number in range(1, NUMBER_OF_ROWS+1):

    add_row(row_number)


root.mainloop()


查看完整回答
反对 回复 2023-08-08
  • 2 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信