2012-02-11 10 views
0

에 대한 Tkinter를 파이썬에서 텍스트 상자의 폭을 조정 I cloumn에 대한 다음과 같은 코드가 내 파이썬 프로그램임의의 숫자

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

모든 숫자에 대한 텍스트 상자가 다소 과장된 것 같습니다. 다양한 텍스트 범위에 다른 색상을 적용 할 수 있다는 것을 알고 있습니까? 여러 위젯을 사용하는 유일한 이유는 색상을 지정하기위한 것이므로 여러 라벨 또는 단일 텍스트 위젯을 사용하십시오. –

+0

수정 방법은 묻지 만 "수정"의 의미는 정의하지 마십시오. 각 셀이 똑같이 확장되기를 원하십니까? 두 문자 모두 너비가 넓습니까? 아니면 "축소되도록"변형해야합니까? –

+0

나중에 각 텍스트 상자가 똑같이 확장되기를 원합니다. 마지막 숫자가 표시됩니다. 처음 3 개가 그처럼 보이기를 원합니다. –

답변

0

내 의견에 대한 응답에 따르면, 당신은 위젯이 동등하게 확장하려는. 눈금을 사용할 때 그렇게하려면 각 열의 무게가 같은지 확인하십시오. 이 예는 것보다 Entry 위젯을 대신 사용하는 방법

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) 

공지 사항 : 여기

또한 코드 라인의 수를 줄이기 위해 루프에서 이러한 모든 위젯을 만드는 방법을 보여주는 예입니다 Text 위젯 이 한 줄의 키가 필요하기 때문에 항상 한 줄의 텍스트 만 허용하기 때문에 Entry 위젯을 사용하는 것이 좋습니다.

0

12 개의 텍스트 상자를 보면 그 크기가 전체 열과 행 (위아래의 셀은 같은 크기 임)과 관련되어 있으므로 텍스트 상자와 다른 "오작동"항목은 열의 형식과 일치하도록 늘어납니다. 이 상황에서 위치 지정을 위해 grid() 대신 pack() 함수를 사용하는 것이 좋습니다. 단순히 각 요소를 다른 요소에 영향을 미치지 않고 형식화 할 수 있기 때문입니다. 텍스트 상자의 너비/높이에 상수 변수를 사용하고 각 속성 (너비 = WIDTHCONSTANT, 높이 = HEIGHTCONSTANT) 등을 설정할 수 있습니다. 행운을 빌어 요!

+0

해당 조언에주의하십시오 - 팩과 격자를 같은 컨테이너에 혼합 할 수 없습니다. 팩을 사용하면 텍스트 위젯을 프레임의 하위로 만들면 의미가 있습니다. 그렇지 않으면, 그들은 정말로 필요한 것보다 더 많은 일을하는'pack'을 사용하기 위해 전체 GUI를 전환해야 할 것입니다. –

+0

네, 맞습니다. 믹싱을위한 no-no 규칙에 대해서는 언급하지 않았습니다. 감사합니다. 그러나, 나는 팩이 더 좋은 방법이라고 생각한다. 또한 나는 개인적으로 팩을 사용하는 것이 더 간단하다는 것을 알았지 만 그것은 그리드와 같은 다른 방법에 대한 사용이 부족하기 때문일 수 있습니다. –