2014-01-23 4 views
-1

Я пытаюсь создать довольно простой электронный ридер, и мне удалось использовать 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() 
+1

Как мы узнаем, что вы делаете неправильно, если опустите один кусок кода, который не работает? Пожалуйста, покажите нам код _with_ полоса прокрутки, которая не работает. Кроме того, ваш отступ выглядит перепутанным - посмотрите в конец с помощью 'def main (0)' и следующего кода. –

+0

Вы пробовали использовать 'ScrolledText'? –

+0

Извините, что вы правы, Брайан, я должен был включить всю кодировку. И да Тобиас, scrolledtext - это тот, который я использовал, как мне было рекомендовано, но я не могу его реализовать. Я уверен, что это что-то очень глупое, что я делаю, но я просто не вижу его как новичка. – Rusky

ответ

0

Добавление полосы прокрутки в текстовый виджет требует от вас сделать две вещи в дополнение к созданию реальных виджетов:

  1. вы должны установить атрибут текстового виджета yscrollcommand, чтобы указать на метод set из скроллбара
  2. вы должны установить атрибут скроллинга command, чтобы указать на yview метод текстового виджета

Например:

self.text.configure(yscrollcommand=self.scrollbar.set) 
self.scrollbar.configure(command=self.text.yview) 
0

Я давно задавался вопросом, могло ли это на самом деле быть ответом на ваш вопрос, но после обсуждения в комментариях, это, кажется, это: Вы просто поставить код создавая 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, так что ScrolledText - это фактический виджет, а не модуль, определяющий виджет.

+0

Да, я идиот. – Rusky

+0

@Rusky Glad Я мог бы помочь. Похоже, что это решило вашу проблему, не могли бы вы «принять» этот ответ? (маленький символ галочки слева) –

Смежные вопросы