滚动条已实施到文本框中

时间:2014-01-23 18:11:49

标签: python tkinter

我正在尝试创建一个相当简单的电子阅读器,并且我设法使用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()  

2 个答案:

答案 0 :(得分:0)

向文本小部件添加滚动条要求您除了创建实际的小部件外还要做两件事:

  1. 您必须将文本窗口小部件的yscrollcommand属性设置为指向滚动条的set方法
  2. 您必须将滚动条的command属性设置为指向文本小部件的yview方法
  3. 例如:

    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是实际的小部件,而不是定义小部件的模块。