2012-02-11 59 views
0

我有cloumn以下代碼,並在我的Python程序調整文本框的Tkinter蟒蛇寬度爲隨機數

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

+0

每個數字的文本框看起來都相當多。你知道你可以將不同的顏色應用於不同的文本範圍嗎?如果您使用多個小部件的唯一原因是用於着色,請使用多個標籤或單個文本小部件。 – 2012-02-11 15:45:56

+0

你問如何解決它,但不要定義「修復」的含義。你是否希望每個細胞均勻展開,如果它們都保留兩個字符寬度,還是應該「縮小到合適」? – 2012-02-11 15:47:32

+0

雅我希望每個文本框平等擴大..最後的數字顯示我希望第一個3也像他們 – 2012-02-11 16:03:24

回答

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小部件是更好的選擇,因爲它總是隻允許一行文本。

0

如果您查看12中的文本框,您可以看到它的大小與整個列和行(上下的單元格大小相同)相關,因此文本框 - 以及您的其他「行爲不端」行爲將會延伸到與其列的格式相匹配。我強烈建議在這種情況下使用pack()函數而不是grid()來定位,因爲它允許您格式化每個單獨的元素而不必影響其他元素。你可以使用一個常量變量來表示文本框的寬度/高度,然後設置它們的每個屬性(width = WIDTHCONSTANT,height = HEIGHTCONSTANT)等等。祝你好運!

+0

要小心這個建議 - 他們不能混合包和網格在同一個容器。如果使文本小部件成爲框架的子項,則使用包是有意義的。否則,他們將不得不切換他們的整個GUI來使用'pack',這看起來比真正需要的工作更多。 – 2014-01-05 13:33:48

+0

是的,這是真的,我忘了提及混合這些的no-no規則,所以謝謝。不過,即使需要打磨,我仍然認爲打包是一個更好的方法。此外,我個人發現使用包更簡單,但這可能是由於缺乏對網格等其他方法的使用。 – 2014-01-05 20:56:36