0

作为概念证明,这将创建 Entry 小部件并将它们放置在一个数组中。问题是我在 Windows 上只有 24 个而不是 26 个 Entry 小部件,3.3.1 和 Lubuntu 上的 28 和 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()
4

1 回答 1

3

您有 26 个条目,但由于每个条目都比其对应的标签短,因此它们被更紧密地打包在一起并且不同步。

在此处输入图像描述

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

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

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()

结果:

在此处输入图像描述

于 2013-09-23T12:04:21.343 回答