在使用Pmw笔记本创建的选项卡中重复内容

时间:2012-07-21 01:26:30

标签: python tkinter

我正在使用Tkinter和Pmw编写一个小应用程序。使用Pmw NoteBook类有一个界面,允许用户创建新的输入选项卡。

这些标签中的每一个都有完全相同的内容(单选按钮和输入字段),所以我希望内容只用一个函数编写。但这不起作用,我不明白为什么不。我在Traceback中得到一个对我没有意义的NameError,因为已经为整个类定义了“page”,我可以在其他函数定义中使用它。

<type 'exceptions.NameError'>: global name 'page' is not defined

我想要做的最简单的工作版本是(基于Pmw附带的NoteBook_2示例):

import Tkinter
import Pmw

class Demo:
    def __init__(self, parent):
        self.pageCounter = 0 
        self.mainframe = Tkinter.Frame(parent)
        self.mainframe.pack(fill = 'both', expand = 1)
        self.notebook = Pmw.NoteBook(self.mainframe)
        buttonbox = Pmw.ButtonBox(self.mainframe)
        buttonbox.pack(side = 'bottom', fill = 'x')
        buttonbox.add('Add Tab', command = self.insertpage)
        self.notebook.pack(fill = 'both', expand = 1, padx = 5, pady = 5)

    def insertpage(self):
        # Create a new Tab
        self.pageCounter = self.pageCounter + 1
        pageName = 'Tab%d' % (self.pageCounter)
        page = self.notebook.insert(pageName)
        self.showPageContent()

    def showPageContent(self):
        # This function should contain the content for all new Tabs
        tabContentExample = Tkinter.Label(page, text="This is the Tab Content I want to repeat\n")
        tabContentExample.pack() 

# Create demo in root window for testing.
if __name__ == '__main__':
    root = Tkinter.Tk()
    Pmw.initialise(root)
    widget = Demo(root)
    root.mainloop()

有人能给我一个指向解决方案的指针吗?

1 个答案:

答案 0 :(得分:0)

showPageContent正在使用未定义的变量page。您可以在另一个方法中本地定义它,但showPageContent方法不知道它。您需要使用self.page,或将page传递给showPageContent

page = self.notebook.insert(pageName)
self.showPageContent(page)