python – 水平滚动条在Tkinter中不起作用

我想基于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()

最佳答案 我已根据
here修改了您的代码.主要有两个不同之处.

>我做了它所以文本框不包装.如果您换行文本,则水平滚动条无法滚动到任何内容.
>我在框架上使用了网格几何管理器来将滚动条和文本小部件保持在一起.使用.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()
点赞