使用for循环创建Entry小部件

时间:2013-09-23 10:25:50

标签: python for-loop tkinter widget

作为概念验证,这会创建Entry小部件并将它们放在一个数组中。问题是我在Windows上只有24个而不是26个Entry小部件,其中3.3.1在Lubuntu上有3.3.1。为什么?以及如何解决此问题?

EDIT2:简化了有问题的部分http://i.imgur.com/u0OmcCI.png的代码: http://pastebin.com/2791MFRu

from tkinter import *

class test:
    def __init__(self, root):
        self.variables = []
        for i in range(26):
            self.variables.append(StringVar())

        self.frames = []
        self.labels = []
        self.entrys = []
        for i in range(2):
            self.frames.append(Frame(root))
            for ii in range(26):
                char = str(chr(ord('A') + ii))
                if i == 0:
                    self.labels.append(Label(self.frames[0] , text = char))
                    self.labels[-1].grid(padx=0, pady=0, row=ii, column=i)
                else:
                    self.entrys.append(Entry(self.frames[1], textvariable =self.variables[ii]))
                    self.entrys[-1].grid(padx=0, pady=0, row=ii, column=i)
            self.frames[i].grid(row = 0,column=i)

root = Tk()
root.geometry("200x600+50+50")
T = test(root)
root.mainloop()

1 个答案:

答案 0 :(得分:1)

您有26个条目,但由于每个条目都比相应的标签短,因此它们会更紧密地组合在一起并且不同步。

enter image description here

这是因为您将两列放在它们自己的帧中,并且每个帧在自己的网格中尽可能紧密地对齐项目,忽略另一列。

您可以通过完全删除列框并将标签和条目直接放在根目录中来获得正确的对齐:

from tkinter import *

class test:
    def __init__(self, root):
        self.variables = []
        for i in range(26):
            self.variables.append(StringVar())

        self.labels = []
        self.entrys = []
        for ii in range(26):
            char = str(chr(ord('A') + ii))
            self.labels.append(Label(root , text = char))
            self.labels[-1].grid(padx=0, pady=0, row=ii, column=0)
            self.entrys.append(Entry(root, textvariable =self.variables[ii]))
            self.entrys[-1].grid(padx=0, pady=0, row=ii, column=1)

root = Tk()
root.geometry("200x600+50+50")
T = test(root)
root.mainloop()

结果:

enter image description here