在tkinter中调整文本框宽度以显示随机数字
我在我的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
小部件是更好的选择,因为它只允许输入一行文字。