【问题标题】:Python tkinter: configure multiple labels with a loopPython tkinter:使用循环配置多个标签
【发布时间】:2017-03-04 18:47:08
【问题描述】:

我有一个带有多个标签的窗口。我不想单独配置每个标签,而是想使用 for 循环来配置它们。

基本上,我从下面的代码中得到的是所有标签都显示文本“问题 #3”,但我希望每个标签标签相应地显示正确的文本 - 所以 label1 需要有文本“问题 #1” ,label2 需要显示“问题 #2”,而 label3 需要显示“问题 #3”。有人可以帮忙吗?

from tkinter import *

root = Tk()

string = 'Question #'

nums = ['1', '2', '3']

#labels
label_1 = Label(root)
label_1.pack()

label_2 = Label(root)
label_2.pack()

label_3 = Label(root)
label_3.pack()
# end of labels

labels = [label_1, label_2, label_3]

for x in nums:
    jk = string + x

    for l in labels:
        l.config(text=jk)

root.mainloop()

【问题讨论】:

    标签: python loops for-loop tkinter


    【解决方案1】:

    仅修改代码的最简单方法是使用 zip。您的代码只是有一些循环问题。

    for x, l in zip(nums,labels): #change your for loops to this
        jk = string + x
        l.config(text=jk)
    

    编写包含此内容的简洁代码:同时生成标签和文本可以为您节省很多代码行。这对您的代码同样适用

    from tkinter import *
    root = Tk()
    string = 'Question #'
    nums = ['1', '2', '3']
    labels=[] #creates an empty list for your labels
    for x in nums: #iterates over your nums
        jk = string + x
        label = Label(root,text=jk) #set your text
        label.pack()
        labels.append(label) #appends the label to the list for further use
    
    root.mainloop()
    

    【讨论】:

    • 非常感谢 abccd
    【解决方案2】:

    这对我有用:

    代码结果如下;

    代码说明:我有一份食谱,其中包含 3 种食物和一种饮料的小自助餐。 我想要 pide(食物)+ayran(饮料),一些身体想要 kebap(食物)+ayran 等。

    客户是否有可能连续看到三种不同的食物和一种饮料?当然可以! 然后我编写了类似下面的代码。试了很多次终于解决了。

    class Class1:
        def __init__(self,master,pide=14,ayran=2,kebap=16,sucuk=12): #Class variables
            self.master=master
            master.title("A simple recipe")
            self.ayran=ayran
            self.pide=pide
            self.kebap=kebap
            self.sucuk=sucuk
        
    
        def hesapla(self):  
    
            pa=self.pide+self.ayran   #food +drink
            ka=self.kebap+self.ayran
            sa=self.sucuk+self.ayran
            #print (pa)
            fiyatlar= [pa,ka,sa]  #arrays of foods+drinks
        
            for x in range(3):
    
                L = tk.Label( text=fiyatlar[x])    #labels for price tags in a 3 rows
                L.grid(row=x,column=1)
    
            yazilar=["pide+ayran=","kebap+ayran=","sucuk+ayran="]  #names of foods and drinks
            for x in range(3):
    
                L2 = tk.Label( text=yazilar[x])
                L2.grid(row=x,column=0)
            
            for x in range(3):
    
                L3 = tk.Label( text="$")   # $ sign near the price tags
                L3.grid(row=x,column=2)
    
        def main(): # let codes work
             uyg = Tk()
             hes1 = Class1(uyg)
             hes1.hesapla()
             uyg.mainloop()
    
         if __name__ == '__main__': #if you want use another .py file, call it.
         main()
    

    【讨论】:

    • 嗨,阿尔法德。感谢您的回答。通常在这里更欢迎带有解释的答案。您想更新您的答案以提供简短的解释吗?
    • 当然可以。当我粘贴我的代码时,我很着急。我在我的代码附近添加了解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 2020-07-21
    • 2021-08-11
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多