2012-09-12 3 views
3

tkinter에서 GUI 프로그램베이스를 만들고 싶다. 위젯 중 하나는 Text입니다. 수평 스크롤바를 추가하고 싶지만 작동하지 않습니다.Tkinter에서 수평 스크롤 바가 작동하지 않았다.

어디에서 실수 했습니까?

from Tkinter import * 
import tkFont 


class DpWin(object): 

    def run(self): 
     root=Tk() 
     root.geometry('768x612') 
     title='dp' 
     root.title(title) 

     xscrollbar = Scrollbar(root, orient=HORIZONTAL) 
     xscrollbar.pack(side=BOTTOM, fill=X) 

     yscrollbar = Scrollbar(root) 
     yscrollbar.pack(side=RIGHT, fill=Y) 

     text = Text(root,xscrollcommand=xscrollbar.set,yscrollcommand=yscrollbar.set) 
     text.pack() 

     xscrollbar.config(command=text.xview) 
     yscrollbar.config(command=text.yview) 
     text.insert(END,'a'*999) 
     mainloop() 

    def start(self): 
     self.b_start.config(state=DISABLED) 
     self.b_stop.config(state=ACTIVE) 

    def stop(self): 
     self.b_stop.config(state=DISABLED) 
     self.b_start.config(state=ACTIVE) 


if __name__=='__main__': 
    win=DpWin() 
    win.run() 
+0

어떤 식으로 작동하지 않습니다? (이 답변은 도움이 될 것입니다 : http://stackoverflow.com/a/6964782/404469) – gary

답변

7

나는 here에 따라 코드를 수정했습니다. 두 가지 주요 차이점이 있습니다.

  1. 텍스트 상자를 감싸지 않도록했습니다. 텍스트를 줄 바꿈하면 가로 스크롤 막대가 스크롤 할 수 없습니다.

  2. 프레임에 그리드 지오메트리 관리자를 사용하여 스크롤 막대와 텍스트 위젯을 함께 유지했습니다. 이점 .grid을 사용하면 실제로 너비/높이가 올바른 스크롤 막대를 얻을 수 있습니다 (pack으로는 얻을 수없는 것).

...

from Tkinter import * 
import tkFont 

class DpWin(object): 
    def run(self): 
     root=Tk() 
     root.geometry('768x612') 
     title='dp' 
     root.title(title) 

     f = Frame(root) 
     f.pack() 

     xscrollbar = Scrollbar(f, orient=HORIZONTAL) 
     xscrollbar.grid(row=1, column=0, sticky=N+S+E+W) 

     yscrollbar = Scrollbar(f) 
     yscrollbar.grid(row=0, column=1, sticky=N+S+E+W) 

     text = Text(f, wrap=NONE, 
        xscrollcommand=xscrollbar.set, 
        yscrollcommand=yscrollbar.set) 
     text.grid(row=0, column=0) 

     xscrollbar.config(command=text.xview) 
     yscrollbar.config(command=text.yview) 
     text.insert(END, 'a'*999) 
     mainloop() 

    def start(self): 
     self.b_start.config(state=DISABLED) 
     self.b_stop.config(state=ACTIVE) 

    def stop(self): 
     self.b_stop.config(state=DISABLED) 
     self.b_start.config(state=ACTIVE) 

if __name__=='__main__': 
    win=DpWin() 
    win.run() 
+0

당신의 도움과 충고에 감사드립니다. 저를 도와주세요! 텍스트를 만들 때 "wrap = NONE"을 잃었습니다. 그리드 형상 관리자를 사용하는 방법을 배웁니다. 감사합니다! – lvshuchengyin

+1

예. 언제나 기꺼이 도와 드리겠습니다. 행운을 빕니다. (필자는'그리드 (grid)'를 선호한다.). 어떤 사람들은 팩이 더 쉽다고 생각하지만, 나는 그리드가 훨씬 더 직관적이라고 생각했다. – mgilson

+0

@mgilson 나는 똑같은 문제에 직면했다. 팩 관리자를 사용할 때 xscrollbar는 내가 한 모든 작업을 수행하지 않습니다. 심지어 yscrollbar 코드에 주석을 달았습니다. 위에 제공된 솔루션은 그리드 관리자에서 작동합니다. 그러나 코드가 길고 팩 관리자가 이미 사용 중이면 그리드 관리자는 도움이되지 않습니다. 그리드 관리자와 팩 manga를 사용하면 코드가 무한 협상으로 들어갑니다. 팩 관리자를 사용하여 솔루션을 게시하시기 바랍니다. 아직도 나는이 문제에 붙어있다. 미리 감사드립니다! – Mohammed