2012-09-12 34 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

感謝您的幫助和advice.It幫助我!我在創建Text時丟失了「wrap = NONE」。我將學習如何使用網格幾何管理器。謝謝! – lvshuchengyin

+1

當然。總是樂於提供幫助。祝你好運。 (我更喜歡'網格'來包裝')。有人認爲包更容易,但我一直認爲'網格'更直觀... – mgilson

+0

@mgilson我面臨同樣的問題。使用包管理器時,xscrollbar將無法工作。即使我評論了Yscrollbar代碼。您上面提供的解決方案適用於網格管理器。但是,如果代碼很長並且包管理器已經在使用中,那麼網格管理器沒有任何幫助。使用網格管理器和包裝漫畫器導致代碼進入無限的談判。我希望你使用包管理器發佈解決方案。我仍然陷入這個問題。提前致謝! – Mohammed