在tkinter中调整文本框宽度以显示随机数字

0 投票
2 回答
954 浏览
提问于 2025-04-17 12:49

我在我的Python程序中有以下代码,用于处理列和行。

def __init__(self):
    Frame.__init__(self)
    self.function = {0:self.bubble, 1:self.insertion, 2:self.selelction}
    self.master.title("Sorting")
    self.master.rowconfigure(5, weight=1)
    self.master.columnconfigure(5, weight=1)
    self.grid(sticky=W+E+N+S )

为了存储随机数字的文本框,我使用了这个代码,每个数字都有一个不同的文本框。

def gen(self):
    self.nums = [random.randint(0, 100) for x in range(10)]
    for num in self.nums:
        i=iter(self.nums)
        item1=i.next()
        item2=i.next()
        item3=i.next()
        item4=i.next()
        item5=i.next()
        item6=i.next()
        item7=i.next()
        item8=i.next()
        item9=i.next()
        item10=i.next()
    #num = ''.join('%4i' % num for num in self.nums)
    self.text1 = Text(self,width=2, height=1)
    self.text1.grid(row =3,column=0,sticky = W+E+N+S)  
    self.text1.insert(END,item1)
    self.text2 = Text(self,width=2, height=1)
    self.text2.grid(row =3,column=1,sticky = W+E+N+S)  
    self.text2.insert(END,item2)
    self.text3 = Text(self,width=2, height=1)
    self.text3.grid(row =3,column=2,sticky = W+E+N+S)  
    self.text3.insert(END,item3)
    self.text4 = Text(self,width=2, height=1)
    self.text4.grid(row =3,column=3,sticky = W+E+N+S)  
    self.text4.insert(END,item4)
    self.text5 = Text(self,width=2, height=1)
    self.text5.grid(row =3,column=4,sticky = W+E+N+S)  
    self.text5.insert(END,item5)
    self.text6 = Text(self,width=2, height=1)
    self.text6.grid(row =3,column=5,sticky = W+E+N+S)  
    self.text6.insert(END,item6)
    self.text7 = Text(self,width=2, height=1)
    self.text7.grid(row =3,column=6,sticky = W+E+N+S)  
    self.text7.insert(END,item7)
    self.text8 = Text(self,width=2, height=1)
    self.text8.grid(row =3,column=7,sticky = W+E+N+S)  
    self.text8.insert(END,item8)
    self.text9 = Text(self,width=2, height=1)
    self.text9.grid(row =3,column=8,sticky = W+E+N+S)  
    self.text9.insert(END,item9)
    self.text10 = Text(self,width=2, height=1)
    self.text10.grid(row =3,column=9,sticky = W+E+N+S)  
    self.text10.insert(END,item10)

但是它的输出结果如下图所示。我该如何修正这个问题呢?

在这里输入图片描述

2 个回答

0

如果你看看那个里面有12的文本框,你会发现它的大小和整个列和行有关(它上面和下面的单元格大小是一样的),所以这个文本框,还有其他那些“表现不佳”的文本框,会拉伸到和它们所在列的格式一致。我强烈建议在这种情况下使用pack()函数来定位,而不是grid()函数,因为pack()可以让你单独调整每个元素的格式,而不会影响到其他元素。你可以为文本框的宽度和高度设置一个常量变量,然后给每个文本框设置这些属性(width=WIDTHCONSTANT, height=HEIGHTCONSTANT)等等。祝你好运!

0

根据我评论下的回复,你想让这些小部件均匀扩展。要做到这一点,当你使用网格布局时,确保每一列的权重是一样的。

这里有一个例子,展示了如何通过循环来创建所有这些小部件,从而减少代码行数:

def gen(self):
    self.nums = [random.randint(0, 100) for x in range(10)]
    self.items = []
    self.text = []

    for column, num in enumerate(self.nums):
        text = Entry(self, width=2)
        text.insert(0, num)
        text.grid(row=3, column=column, sticky="nsew")
        self.items.append(num)
        self.text.append(text)
        self.grid_columnconfigure(column, weight=1)

注意这个例子使用的是Entry小部件,而不是Text小部件。因为你只想要一行的高度,Entry小部件是更好的选择,因为它只允许输入一行文字。

撰写回答