我正在构建一个需要显示大量文本的程序,我需要将一个滚动条附加到Text小部件。
我正在使用Windows 7,python 3.3 ...... 这是我正在使用的一个小的(可能的)例子。我觉得我在这里错过了一些非常明显的东西,而这正在推动我 * *疯狂。
import datetime
import tkinter as tk
import tkinter.messagebox as tkm
import sqlite3 as lite
class EntriesDisplayArea(tk.Text):
"""
Display area for the ViewAllEntriesInDatabaseWindow
"""
def __init__(self,parent):
tk.Text.__init__(self, parent,
borderwidth = 3,
height = 500,
width = 85,
wrap = tk.WORD)
self.parent = parent
class EntriesDisplayFrame(tk.Frame):
"""
Containing frame for the text DisplayArea
"""
def __init__(self, parent):
tk.Frame.__init__(self, parent, relief = tk.SUNKEN,
width = 200,
borderwidth = 2)
self.parent = parent
self.grid(row = 0, column = 0)
self.entriesDisplayArea = EntriesDisplayArea(self)
self.entriesDisplayArea.grid(row = 1, column = 0, sticky = 'ns')
self.scrollVertical = tk.Scrollbar(self, orient = tk.VERTICAL,
command = self.entriesDisplayArea.yview)
self.entriesDisplayArea.config(yscrollcommand = self.scrollVertical.set)
for i in range(1000):
self.entriesDisplayArea.insert(tk.END,'asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf')
self.scrollVertical.grid(row=1,column=1,sticky = 'ns')
class ViewAllEntriesInDatabaseWindow(tk.Toplevel):
"""
Window in which the user can view all of the entries entered ever
entered into the database.
"""
def __init__(self, parent = None):
tk.Toplevel.__init__(self,parent,
height = 400,
width = 400)
self.grid()
self.entriesDisplayFrame = EntriesDisplayFrame(self)
if __name__ == '__main__':
t0 = ViewAllEntriesInDatabaseWindow(None)
答案 0 :(得分:2)
我认为您的问题存在是因为您的代码存在两个问题。一,您将文本小部件的高度设置为500.该值表示字符而不是像素,因此您将其设置为几千像素高。其次,您只需要插入一行文本,尽管文本长度为40,000个字符。如果您将高度设置为更合理的值,例如50而不是500,并在插入的数据中插入换行符,您将看到滚动条开始正常运行。
在不相关的注释中,self.grid()
__init__
ViewAllEntriesInDatabaseWindow
方法中对{{1}}的调用完全没用。您无法将小部件打包,放置或网格放入其他小部件中。
最后,我建议你不将任何类构造函数调用网格(或打包或放置)本身 - 这将使您的代码难以维护。创建窗口小部件时,父窗口小部件应负责调用网格,打包或放置。否则,如果您决定重新组织窗口,则必须编辑每个子窗口小部件。