Python 水平滚动条没有';我不在特金特工作

Python 水平滚动条没有';我不在特金特工作,python,text,tkinter,scrollbar,Python,Text,Tkinter,Scrollbar,我想创建一个基于tkinter的GUI程序。其中一个小部件是Text。我想在其中添加一个水平滚动条,但它不起作用 我在哪里犯了错误 from Tkinter import * import tkFont class DpWin(object): def run(self): root=Tk() root.geometry('768x612') title='dp' root.title(title)

我想创建一个基于tkinter的GUI程序。其中一个小部件是
Text
。我想在其中添加一个水平滚动条,但它不起作用

我在哪里犯了错误

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()

我已根据修改了您的代码。有两个主要区别

  • 我这样做是为了让文本框不被包装。如果换行文本,则水平滚动条没有可滚动的内容

  • 我在一个框架上使用网格几何管理器将滚动条和文本小部件保持在一起。使用
    .grid
    的优点是,您实际上可以获得正确宽度/高度的滚动条(这是使用
    无法实现的)


  • 关于让x和y滚动条在pack框架内工作,有一条评论。下面是一个简单的例子:

    import tkinter as tk
    from tkinter import X, Y, BOTTOM, RIGHT, LEFT, Y, HORIZONTAL
    class TextExample(tk.Frame):
        def __init__(self, master=None):
            super().__init__()
    
            sy = tk.Scrollbar(self)
            sx = tk.Scrollbar(self,  orient=HORIZONTAL)
            editor = tk.Text(self, height=500, width=300, wrap='none')
            sx.pack(side=BOTTOM, fill=X)
            sy.pack(side=RIGHT, fill=Y)
            editor.pack(side=LEFT, fill=Y)
            sy.config(command=editor.yview)
            sx.config(command=editor.xview)
            self.pack()
    def main():
        root = tk.Tk()
        root.geometry("800x500+0+0")
        app = TextExample(master=root)
        root.mainloop()  
    if __name__ == '__main__':
        main()   
    

    它以什么方式不起作用?(这个答案应该有帮助:)谢谢你的帮助和建议。它帮助了我!我在创建文本时丢失了“wrap=NONE”。我将学习如何使用网格几何体管理器。谢谢!当然总是乐于助人。祝你好运(我更喜欢
    grid
    而不是
    pack
    )。有些人认为打包更简单,但我一直认为
    grid
    更直观…@mgilson我也面临同样的问题。使用包管理器时,无论我做了什么,xscrollbar都无法工作。即使我注释了YSCROLLLBAR代码。上面提供的解决方案适用于grid manager。但是,如果代码很长,并且packmanager已经在使用,那么gridmanager就没有任何帮助。使用grid manager和pack mangaer会导致代码进入无限协商。我希望您使用packmanager发布解决方案。但我还是被这个问题困扰着。提前谢谢!
    import tkinter as tk
    from tkinter import X, Y, BOTTOM, RIGHT, LEFT, Y, HORIZONTAL
    class TextExample(tk.Frame):
        def __init__(self, master=None):
            super().__init__()
    
            sy = tk.Scrollbar(self)
            sx = tk.Scrollbar(self,  orient=HORIZONTAL)
            editor = tk.Text(self, height=500, width=300, wrap='none')
            sx.pack(side=BOTTOM, fill=X)
            sy.pack(side=RIGHT, fill=Y)
            editor.pack(side=LEFT, fill=Y)
            sy.config(command=editor.yview)
            sx.config(command=editor.xview)
            self.pack()
    def main():
        root = tk.Tk()
        root.geometry("800x500+0+0")
        app = TextExample(master=root)
        root.mainloop()  
    if __name__ == '__main__':
        main()