0

私はTkinterとPmwを使用して小さなアプリケーションを書いています。Pmw NoteBookクラスを使用すると、ユーザーが入力用の新しいタブを作成できるようにするインターフェイスがあります。

これらの各タブにはまったく同じコンテンツ(ラジオボタンと入力フィールド)があるので、コンテンツを1つの関数だけで記述したいと思います。しかし、これは機能せず、なぜそうなのかわかりません。「ページ」がクラス全体に対して定義されているため、トレースバックでNameErrorが発生しますが、これは意味がありません。他の関数定義で使用できます。

<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()

誰かが私に解決策へのポインタを与えることができますか?

4

1 に答える 1

0

showPageContentpage未定義の変数を使用しています。別のメソッドでローカルに定義しますが、メソッドには認識されませんshowPageContentself.pageを使用するか、に渡す必要がありpageますshowPageContent

page = self.notebook.insert(pageName)
self.showPageContent(page)
于 2012-07-21T13:29:56.147 に答える