1

さて、私は GTKPython の初心者ですが、必要な情報を掘り下げることができませんでした。基本的に私が持っているのはラジオボタンのリストであり、どれがチェックされているかに基づいて、ボタンを別の機能に接続する必要があります。すべてのラジオ ボタンを作成してからsget_active()、各ボタンをチェックする嫌な if/else ブロックを作成してみました。問題は、同じボタンが毎回 true を返すことです。何か案は?

使用中のコードは次のとおりです。

    #Radio Buttons Center
    self.updatePostRadioVBox = gtk.VBox(False, 0)
    self.updatePageRadio = gtk.RadioButton(None, "Updating Page")
    self.updatePostRadio = gtk.RadioButton(self.updatePageRadio, "Updating Blog Post")
    self.pageRadio = gtk.RadioButton(self.updatePageRadio, "New Page")
    self.blogRadio = gtk.RadioButton(self.updatePageRadio, "New Blog Post")
    self.addSpaceRadio = gtk.RadioButton(self.updatePageRadio, "Add New Space")
    self.removePageRadio = gtk.RadioButton(self.updatePageRadio, "Remove Page")
    self.removePostRadio = gtk.RadioButton(self.updatePageRadio, "Remove Blog Post")
    self.removeSpaceRadio = gtk.RadioButton(self.updatePageRadio, "Remove Space")


    #Now the buttons to direct us from here
    self.returnMainMenuButton = gtk.Button(" Main Menu ")
    self.returnMainMenuButton.connect("clicked", self.transToMain)
    self.contentManageHBoxBottom.pack_start(self.returnMainMenuButton, False, False, 30)
    self.contentProceedButton = gtk.Button("    Proceed    ")
    self.contentManageHBoxBottom.pack_end(self.contentProceedButton, False, False, 30)

    if self.updatePageRadio.get_active():
        self.contentProceedButton.connect("clicked", self.updatePage)

    elif self.updatePostRadio.get_active():
        self.contentProceedButton.connect("clicked", self.updatePost)

    elif self.pageRadio.get_active():
        self.contentProceedButton.connect("clicked", self.newPage)

    elif self.blogRadio.get_active():
        self.contentProceedButton.connect("clicked", self.newBlogPost)

    elif self.addSpaceRadio.get_active():
        self.contentProceedButton.connect("clicked", self.newSpace)

    elif self.removePageRadio.get_active():
        self.contentProceedButton.connect("clicked", self.removePage)

    elif self.removePostRadio.get_active():
        self.contentProceedButton.connect("clicked", self.removeBlogPost)

    elif self.removeSpaceRadio.get_active():
        self.contentProceedButton.connect("clicked", self.removeSpace)
4

2 に答える 2

7

編集:(いくつかのコードを投稿したので)、次を使用してください:

active = [r for r in self.updatePageRadio.get_group() if r.get_active()][0]

それを使用して、関数の辞書を調べて呼び出します。

my_actions[active]()

編集:これはRadioButtonsの良いユースケースではないことを完全に忘れていました。私の意見では、通常のgtk.Buttonの方がはるかに優れています。


あなたの答えは、RadioButton の「グループ」システムを使用することです。このドキュメントで説明されていますが、小さな実用的な例を次に示します。

まず、グループは、他の多くの RadioButton を収集するために使用される RadioButton そのものです。コンストラクターの最初の引数としてグループを指定します。

r1 = gtk.RadioButton(None, label='Cat') # this has no group, it is the first
r2 = gtk.RadioButton(r1, label='Mouse') # use the first radio
                                        # button as the group argument
r3 = gtk.RadioButton(r1, label='Dog')   # again use r1

これで、すべてのラジオ ボタンが同期されます。そして、それらを読むことは次のように簡単です。

active_radios = [r for r in r1.get_group() if r.get_active()]
于 2008-12-24T11:32:24.617 に答える
0

まず、これはタイプミスだと思いますが、実際にはコードで set_active() ではなく get_active() を呼び出していますか? それ以外は、コードを見なくても、ラジオ ボタンに関する pygtk チュートリアルを参照できます。

于 2008-12-24T11:31:58.673 に答える