首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python set_visible的工作原理

Python set_visible的工作原理
EN

Stack Overflow用户
提问于 2015-03-18 19:03:13
回答 1查看 1.6K关注 0票数 1

我有一个窗口,有两个下拉列表(国家和俱乐部),不应该同时出现。

当应用程序加载时,两者都不应该是可见的。第三个下拉列表(锦标赛类型),在默认情况下不进行任何选择,决定应该显示哪个俱乐部或国家列表。单击屏幕顶部的按钮将填充下拉列表,选择适当的锦标赛类型和相关的俱乐部/或国家。

实际情况:当它加载时,两个下拉列表都是可见的。当选择竞赛类型时,这两个列表都是可见的。当我点击顶部的按钮时,俱乐部列表是可用的,而国家列表是无效的。后者完全是它应该做的。

我使用相同的函数(set_visible())来显示或隐藏每一种情况下的列表,因此我不知道为什么它在一种情况下工作,而在另两种情况下不起作用。

下面的代码应该运行。之后的位添加锦标赛标签创建小部件,并成功地试图隐藏组合框。函数on_type_combo更改失败,试图隐藏一个组合框。函数on_tournament_details成功地隐藏了适当的框。

代码语言:javascript
复制
#!/usr/bin/python
# coding=utf-8
from gi.repository import Gtk
import wikipedia


class NotebookWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="Rugby Database")

        #Initialise data
        self.country_store = Gtk.ListStore(int, str, str)
        self.club_store = Gtk.ListStore(int, str, str, int, int)
        self.tournament_store = Gtk.ListStore(int, str, int, str, int)
        self.cur_id = 0

        self.cur_club = ''
        self.cur_club_id = 0

        self.update_club_id = 0
        self.update_tournament_id = 0

        self.initialise_lists()

        #Create Application Window
        self.set_border_width(10)
        self.set_default_size(800, 600)
        self.set_position(Gtk.WindowPosition.CENTER)

        #Add external container (box)
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
        self.add(vbox)

        #Add tabbed window
        self.nbook = Gtk.Notebook()
        vbox.pack_start(self.nbook, True, True, 0)
        self.nbook.show()


        #Add Tournaments tab
        frame = Gtk.Frame()
        frame.show()

        self.t_type_id = -1

        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)

        self.tournament_box = Gtk.FlowBox()
        self.tournament_box.set_valign(Gtk.Align.START)
        self.tournament_box.set_max_children_per_line(4)
        self.tournament_box.set_selection_mode(Gtk.SelectionMode.SINGLE)
        self.tournament_box.set_activate_on_single_click(True)

        vbox.pack_start(self.tournament_box, True, True, 0)
        self.wiki_label = Gtk.Label()
        self.wiki_label.set_line_wrap(True)
        vbox.add(self.wiki_label)
        tournament_grid = Gtk.Grid()
        tournament_grid.set_column_spacing(5)
        tournament_label = Gtk.Label("  Tournament Name:  ")
        tournament_logo_label = Gtk.Label("Logo:")
        self.tournament_logo_entry = Gtk.Entry()
        self.tournament_entry = Gtk.Entry()
        self.t_type_combo = Gtk.ComboBoxText()
        self.t_holder_combo_country = Gtk.ComboBoxText()
        self.t_holder_combo_club = Gtk.ComboBoxText()

        self.t_holder_combo_country = Gtk.ComboBox.new_with_model(self.country_store)
        renderer_text = Gtk.CellRendererText()
        self.t_holder_combo_country.pack_start(renderer_text, True)
        self.t_holder_combo_country.add_attribute(renderer_text, "text", 1)

        self.t_holder_combo_club = Gtk.ComboBox.new_with_model(self.club_store)
        renderer_text = Gtk.CellRendererText()
        self.t_holder_combo_club.pack_start(renderer_text, True)
        self.t_holder_combo_club.add_attribute(renderer_text, "text", 1)
        self.t_type_combo.append_text("Club")
        self.t_type_combo.append_text("International")
        self.t_type_combo.connect("changed", self.on_type_combo_changed)
        renderer_text = Gtk.CellRendererText()
        self.t_type_combo.pack_start(renderer_text, True)
        self.t_type_combo.add_attribute(renderer_text, "text", 1)
        type_label = Gtk.Label("  Type:  ")
        holder_label = Gtk.Label("  Holder:  ")
        tournament_add = Gtk.Button("  Save  ")
        tournament_grid.add(tournament_label)
        tournament_grid.add(self.tournament_entry)
        tournament_grid.add(type_label)
        tournament_grid.add(self.t_type_combo)
        tournament_grid.add(tournament_logo_label)
        tournament_grid.add(self.tournament_logo_entry)
        tournament_grid.add(holder_label)
        tournament_grid.add(self.t_holder_combo_club)
        tournament_grid.add(self.t_holder_combo_country)
        tournament_grid.add(tournament_add)
        vbox.add(tournament_grid)
        self.t_holder_combo_club.set_visible(False)
        self.t_holder_combo_country.set_visible(False)
        self.tournament_message = Gtk.Label("\n")
        vbox.add(self.tournament_message)
        label = Gtk.Label()
        label.set_markup("<b><big>Tournaments</big></b>")

        frame.add(vbox)

        self.nbook.append_page(frame, label)

        self.load_boxes()



##### Function definitions #####

    def initialise_lists(self):
        self.country_store.clear()
        self.country_store.append([1, 'Ireland', ''])


        self.club_store.clear()
        self.club_store.append([1, 'Leinster', '',1,1])

        self.tournament_store.clear()
        self.tournament_store.append([1, 'Pro 12', 1,'',1])


    def reset_forms(self):
        self.tournament_entry.set_text('')
        self.update_club_id = 0
        self.update_tournament_id = 0
        self.tournament_entry.set_text('')
        self.tournament_logo_entry.set_text('')
        self.wiki_label.set_text('\n')

    def load_boxes(self):
        self.tournament_box.foreach(lambda widget: self.tournament_box.remove(widget))
        for tournament in range(0, len(self.tournament_store)):
            button = Gtk.Button(self.tournament_store[tournament][1])
            self.tournament_box.add(button)
            button.connect('clicked', self.on_tournament_details, tournament)
        self.tournament_box.show_all()


    def on_club_combo_changed(self, combo):
        tree_iter = combo.get_active_iter()
        if tree_iter is not None:
            model = combo.get_model()
            self.cur_club_id = model[tree_iter][0]


    def on_type_combo_changed(self, combo):
        tree_iter = combo.get_active_iter()
        if tree_iter is not None:
            model = combo.get_model()
            self.t_type_id = model[tree_iter][0]
        if self.t_type_id is "Club":
            self.t_holder_combo_country.set_visible(False)
            self.t_holder_combo_club.set_visible(True)
        elif self.t_type_id is "International":
            self.t_holder_combo_club.set_visible(False)
            self.t_holder_combo_country.set_visible(True)


    def on_tournament_details(self, button, tournament):
        self.tournament_entry.set_text(self.tournament_store[tournament][1])
        self.t_type_combo.set_active(self.tournament_store[tournament][2]-1)
        self.tournament_logo_entry.set_text(self.tournament_store[tournament][3])
        self.update_tournament_id = self.tournament_store[tournament][0]
        self.tournament_message.set_text('\n')
        self.wiki_label.set_text(wikipedia.summary(self.tournament_store[tournament][1], sentences=2))
        if self.t_type_id == "Club":
            self.t_holder_combo_country.set_visible(False)
            self.t_holder_combo_club.set_visible(True)
            self.t_holder_combo_club.set_active(self.tournament_store[tournament][4]-1)
        elif self.t_type_id == "International":
            self.t_holder_combo_club.set_visible(False)
            self.t_holder_combo_country.set_visible(True)
            self.t_holder_combo_country.set_active(self.tournament_store[tournament][4]-1)



win = NotebookWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()

Gtk.main()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-18 19:19:02

当您调用win.show_all()时,告诉下拉列表不要显示。这可以通过在小部件上调用set_no_show_all来实现,这不应该显示。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29130601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档