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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐