繁体   English   中英

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

[英]Create a Tkinter widget class from another Tkinter widget class

我正在尝试使用现有的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

这是我编写的代码,该代码使新的滚动文本窗口小部件由两个现有滚动文本窗口小部件组成:

class ScrolledTextComposite(Frame):
def __init__(self, parent=NONE):
    Frame.__init__(self, parent)
    self.pack(expand=YES, fill=BOTH)
    self.makeWidgets()
    self.text1 = 'aaaaaa'
    self.text2 = 'bbbbbbb'

def makeWidgets(self):

    try:
        self.top = ScrolledText(self, file=sys.argv[1], width= 50, height=15).pack()
    except IndexError:
        self.top = ScrolledText(self, text= self.text1, width= 50, height=15).pack()

    try:
        self.bot = ScrolledText(self,file=sys.argv[1], width=50, height=15).pack()
    except IndexError:
        self.bot = ScrolledText(self, text= self.text2, width=50, height=15).pack()

我正在运行的ScrolledText小部件类创建了一个滚动的文本小部件,并允许将文本小部件中的文本作为文件或文本字符串输入。 在这种情况下,我使用的是文本字符串,而不是要显示的文本源文件。 ScrolledTextComposite类的makeWidget部分中的tryexcept语句是ScrolledText类处理文件或文本字符串作为输入的能力的结果。 这是绘制新的复合滚动文本小部件的mainloop表达式:

ScrolledTextComposite().mainloop()

当我运行此代码时,出现以下错误消息:

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

我认为此错误是由于我如何编码ScrolledTextComposite类以输入要在ScrolledTextComposite小部件组成的各个文本小部件中显示的文本字符串而引起的。 如果有人对如何正确使用ScrolledTextComposite类功能​​有任何想法,我将感谢您的帮助。 真诚的乔治

class ScrolledTextComposite(Frame):
    def __init__(self, parent=NONE):

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

class ScrolledTextComposite(Frame):
    def __init__(self, parent=None):
        Frame.__init__(self, parent)
        self.pack(expand=YES, fill=BOTH)
        self.text1 = 'aaaaaa'
        self.text2 = 'bbbbbbb'
        self.makeWidgets()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM