从另一个Tkinter小部件类创建Tkinter小部件类

2024-10-02 20:42:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用现有的Tkinter小部件类创建Tkinter小部件类。我现有的Tkinter小部件类是一个滚动文本小部件类,我尝试创建的小部件类使用我现有的滚动文本小部件类来创建一个小部件,该小部件将两个现有的滚动文本小部件组合起来,以创建一个单一的复合小部件。我写的代码看起来很接近正确,但却给了我一个错误消息。以下是我现有的功能性滚动文本小部件类代码:

class ScrolledText(Frame):
def __init__(self, parent=None, text='', file=None, width='', height=''):
    Frame.__init__(self, parent)
    self.pack(expand=YES, fill=BOTH)                # make me expandable
    self.width = width
    self.height = height
    self.makewidgets()
    self.settext(text, file)
def makewidgets(self):
    sbar = Scrollbar(self)
    text = Text(self, relief=SUNKEN, width=self.width, height=self.height)
    sbar.config(command=text.yview)                  # xlink sbar and text
    text.config(yscrollcommand=sbar.set)             # move one moves other
    sbar.pack(side=RIGHT, fill=Y)                    # pack first=clip last
    text.pack(side=LEFT, expand=YES, fill=BOTH)      # text clipped first
    self.text = text
def settext(self, text='', file=None):
    if file: 
        text = open(file, 'r').read()
    self.text.delete('1.0', END)                     # delete current text
    self.text.insert('1.0', text)                    # add at line 1, col 0
    self.text.mark_set(INSERT, '1.0')                # set insert cursor
    self.text.focus()                                # save user a click
def gettext(self):                                   # returns a string
    return self.text.get('1.0', END+'-1c')           # first through last

下面是我编写的代码,它生成了一个新的滚动文本小部件,它由两个现有的滚动文本小部件组合而成:

^{pr2}$

我的ScrolledText小部件类可以创建一个文本小部件,它可以滚动并允许文本小部件中的文本作为文件或文本字符串输入。在本例中,我使用文本字符串而不是文件作为要显示的文本源。ScrolledTextComposite类的makeWidget部分中的try except语句是ScrolledText类处理文件或文本字符串作为输入的能力的结果。 下面是绘制新的复合滚动文本小部件的主循环表达式:

ScrolledTextComposite().mainloop()

运行此代码时,我收到以下错误消息:

AttributeError: 'str' object has no attribute 'tk'

我相信这个错误是由于我如何编写ScrolledTextComposite类来输入要在ScrolledTextComposite小部件组成的单个文本小部件中显示的文本字符串造成的。如果有人知道如何使ScrolledTextComposite类正常工作,我将非常感谢您的帮助。真的,乔治


Tags: 字符串代码text文本self部件tkinterdef
1条回答
网友
1楼 · 发布于 2024-10-02 20:42:45
class ScrolledTextComposite(Frame):
    def __init__(self, parent=NONE):

NONE是由Tkinter创建的字符串常量。您需要内置对象None。另外,记住在调用makeWidgets之前初始化text1和text2值。在

^{pr2}$

相关问题 更多 >