我正在尝试创建一个相当简单的电子阅读器,并且我设法使用tkinter创建类似于一个的东西。但我似乎无法解决的是如何创建滚动条以允许用户随意滚动文本。我可以让它在其他编码中工作,但我不能使它在这个程序中工作,我无法弄清楚问题是什么。我把简单的电子阅读器放在下面,没有尝试过的滚动条。
from Tkinter import *
import tkFileDialog
import ScrolledText
class Example(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.parent = parent
self.initUI()
def initUI(self):
self.parent.title("File dialog")
self.pack(fill=BOTH, expand=1)
menubar = Menu(self.parent)
self.parent.config(menu=menubar)
fileMenu = Menu(menubar)
fileMenu.add_command(label="Open", command=self.onOpen)
menubar.add_cascade(label="File", menu=fileMenu)
self.txt = Text(self)
self.txt.pack(fill=BOTH, expand=1)
def onOpen(self):
ftypes = [('Python files', '*.py'), ('All files', '*')]
dlg = tkFileDialog.Open(self, filetypes = ftypes)
fl = dlg.show()
if fl != '':
text = self.readFile(fl)
self.txt.insert(END, text)
def readFile(self, filename):
f = open(filename, "r")
text = f.read()
return text
self.txt = ScrolledText(self, undo=True)
self.txt['font'] = ('consolas', '12')
self.txt.pack(expand=True, fill='both')
def main():
root = Tk()
ex = Example(root)
root.geometry("300x250+300+300")
root.mainloop()
if __name__ == '__main__':
main()
答案 0 :(得分:0)
向文本小部件添加滚动条要求您除了创建实际的小部件外还要做两件事:
yscrollcommand
属性设置为指向滚动条的set
方法command
属性设置为指向文本小部件的yview
方法例如:
self.text.configure(yscrollcommand=self.scrollbar.set)
self.scrollbar.configure(command=self.text.yview)
答案 1 :(得分:0)
我一直想知道这是否真的是你问题的答案,但在评论中讨论后,它似乎是:你只需要创建代码{{1}在错误的地方!
尝试移动这三行(现在在课堂外,导致ScrolledText
NameError
self
这些行在self.txt = ScrolledText(self, undo=True)
self.txt['font'] = ('consolas', '12')
self.txt.pack(expand=True, fill='both')
方法中的位置(替换这些行)
initUI
换句话说,在self.txt = Text(self)
self.txt.pack(fill=BOTH, expand=1)
方法中,创建initUI
,而不是创建Text
小部件。另外,将ScrolledText
更改为import ScrolledText
,以便from ScrolledText import ScrolledText
是实际的小部件,而不是定义小部件的模块。