调整tkinter python中文本框的宽度以获取随机数

时间:2012-02-11 06:11:23

标签: python user-interface tkinter

我的python程序中有cloumn和row的以下代码

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)

但它的输出如下所示。我怎么能纠正这个。

enter image description here

2 个答案:

答案 0 :(得分: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小部件是更好的选择,因为它始终只允许一行文本。

答案 1 :(得分:0)

如果您查看其中包含12的文本框,您可以看到它的大小与整个列和行相关(其上方和下方的单元格大小相同),因此文本框 - 以及您的其他“行为不端”会扩展以匹配其列的格式。我强烈建议在这种情况下使用pack()函数而不是grid()进行定位,因为它允许您格式化每个单独的元素,而不会影响其他元素。你可以使用常量变量来表示文本框的宽度/高度,然后设置它们的每个属性(width = WIDTHCONSTANT,height = HEIGHTCONSTANT)等。祝你好运!