سؤال

حسنا، سوف أعمى هذا مع حقيقة أنني gtk و بيثون Newb، لكنني لم أتمكن من حفر المعلومات التي احتاجتها. أساسا ما لدي هو قائمة أزرار الراديو، واستنادا إلى أي واحد يتم فحصه، أحتاج إلى توصيل زر إلى وظيفة مختلفة. حاولت إنشاء جميع أزراري الراديوي، ثم إنشاء تفكيك غير مثير للاشمئزاز sget_active() على كل زر. المشكلة هي نفس زر إرجاع صحيح كل مرة. أيه أفكار؟

إليك الرمز قيد الاستخدام:

    #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)
هل كانت مفيدة؟

المحلول

تحرير: (منذ أن قمت بنشر بعض الكود)، استخدم فقط:

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

واستخدم ذلك للبحث في DICTION الوظائف واتصل به:

my_actions[active]()

تحرير: لقد نسيت تماما أن أذكر أن هذه ليست حالة استخدام جيدة على الإطلاق ل Radiobuttons، فإن GTK.Button العادية سيكون أفضل بكثير في رأيي.


إجابتك هي استخدام نظام Radiobutton "مجموعات". يتم شرحه في هذا المستند, ، ولكن هنا مثال عملي صغير.

أولا، توجد مجموعة فقط فقط Radiobutton نفسه يستخدم لجمع عدد من Radiobuttons الآخرين. يمكنك تحديد مجموعة كوسخة الأولى للمشارك.

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

نصائح أخرى

أولا، أفترض أن هذا خطأ مطبعي وأنت تدعو في الواقع get_active () في التعليمات البرمجية وليس set_active ()؟ بخلاف ذلك، دون رؤية الكود، يمكنني توجيهك إلى البرنامج التعليمي Pygtk حول أزرار الراديو

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top