Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用ToggleToolButton在ListView和IconView之间切换_Python_User Interface_Gtk_Gtk3 - Fatal编程技术网

Python 使用ToggleToolButton在ListView和IconView之间切换

Python 使用ToggleToolButton在ListView和IconView之间切换,python,user-interface,gtk,gtk3,Python,User Interface,Gtk,Gtk3,我目前正在开发一个文件管理器,我已经成功地分别实现了ListView和IconView。现在我想创建一个切换按钮,以便用户可以在这些视图之间切换。我想通过根据切换按钮的状态更改主视图来实现这一点: if toggletoolbutton.get_active(): main_view = create_icon_view() else: main_view = create_list_view() 为此,我为切换按钮创建了事件:t

我目前正在开发一个文件管理器,我已经成功地分别实现了ListView和IconView。现在我想创建一个切换按钮,以便用户可以在这些视图之间切换。我想通过根据切换按钮的状态更改主视图来实现这一点:

if toggletoolbutton.get_active():
            main_view = create_icon_view()
        else:
            main_view = create_list_view()
为此,我为切换按钮创建了事件:
toggletoolbutton.connect(“toggled”,单击切换按钮)

以下是我的两个店铺:

  • icon_store=Gtk.ListStore(GdkPixbuf.Pixbuf、str、bool、float、,
    浮动)
  • list\u store=Gtk.ListStore(str,str,bool,float,float)
  • 我使用以下方法填充它们:

    def get_icon(name):
            theme = Gtk.IconTheme.get_default()
            return theme.load_icon(name, 60, 0)
    
    
    def populate_icon_store():
    
        global icon_store
        icon_store.clear()
    
        file_icon = get_icon(Gtk.STOCK_FILE)
        folder_icon = get_icon(Gtk.STOCK_DIRECTORY)
    
        for file_name in os.listdir(CURRENT_DIRECTORY):        
            modified_time = 0#os.path.getmtime(CURRENT_DIRECTORY+file_name)
            size = 0#os.path.getsize(CURRENT_DIRECTORY+file_name)
            if not file_name[0] == '.':
                if os.path.isdir(os.path.join(CURRENT_DIRECTORY, file_name)):
                    icon_store.append([
                    folder_icon, 
                    file_name, 
                    True,
                    modified_time,
                    size
                    ])
                else:
                    icon_store.append([
                    file_icon, 
                    file_name, 
                    False,
                    modified_time,
                    size
                    ])
    
    
    def populate_list_store():
    
        global list_store
        list_store.clear()
    
        file_icon = Gtk.STOCK_FILE
        folder_icon = Gtk.STOCK_DIRECTORY
    
        for file_name in os.listdir(CURRENT_DIRECTORY):        
            modified_time = 0#os.path.getmtime(CURRENT_DIRECTORY+file_name)
            size = 0#os.path.getsize(CURRENT_DIRECTORY+file_name)
            if not file_name[0] == '.':
                if os.path.isdir(os.path.join(CURRENT_DIRECTORY, file_name)):
                    list_store.append([
                    folder_icon, 
                    file_name, 
                    True,
                    modified_time,
                    size
                    ])
                else:
                    list_store.append([
                    file_icon, 
                    file_name, 
                    False,
                    modified_time,
                    size
                    ])
    
    整个代码库相当大,因此您可以在此处找到它:

    这些视图单独工作正常,但使用“切换”时,它们无法工作。我如何解决它

    我阅读了这里提出的解决方案:


    但是在我的例子中,
    main\u视图
    调用了两个独立的函数,分别重新调用
    listview
    iconview
    您必须做两件事:

  • 替换GUI中的小部件
  • 更新
    主视图
    变量的值
  • 由于您没有显示将
    main\u view
    添加到小部件层次结构中的代码部分,因此我使用了
    replace\u小部件
    函数:


    填充列表存储区的代码是否与问题相关?您只想用另一个小部件替换一个小部件,在
    单击切换按钮
    中不可能使用重复的小部件,因此如果有人需要,我提供了参考。@Aran Fey感谢链接,我将检查它并在需要时更新问题,else将删除它。@Aran Fey在
    单击切换按钮期间如何使用此函数将视图分配给主视图?
    ?它给出以下错误:
    类型错误:无法从“类型”中检索GObject类型类
    @AbhishekKeshri不幸的是,我没有耐心下载、阅读和更新你的6个python文件,这样我就可以重现这个错误,所以我会等你用一个。是的,公平,没问题。我会自己解决的。干杯
    def get_icon(name):
            theme = Gtk.IconTheme.get_default()
            return theme.load_icon(name, 60, 0)
    
    
    def populate_icon_store():
    
        global icon_store
        icon_store.clear()
    
        file_icon = get_icon(Gtk.STOCK_FILE)
        folder_icon = get_icon(Gtk.STOCK_DIRECTORY)
    
        for file_name in os.listdir(CURRENT_DIRECTORY):        
            modified_time = 0#os.path.getmtime(CURRENT_DIRECTORY+file_name)
            size = 0#os.path.getsize(CURRENT_DIRECTORY+file_name)
            if not file_name[0] == '.':
                if os.path.isdir(os.path.join(CURRENT_DIRECTORY, file_name)):
                    icon_store.append([
                    folder_icon, 
                    file_name, 
                    True,
                    modified_time,
                    size
                    ])
                else:
                    icon_store.append([
                    file_icon, 
                    file_name, 
                    False,
                    modified_time,
                    size
                    ])
    
    
    def populate_list_store():
    
        global list_store
        list_store.clear()
    
        file_icon = Gtk.STOCK_FILE
        folder_icon = Gtk.STOCK_DIRECTORY
    
        for file_name in os.listdir(CURRENT_DIRECTORY):        
            modified_time = 0#os.path.getmtime(CURRENT_DIRECTORY+file_name)
            size = 0#os.path.getsize(CURRENT_DIRECTORY+file_name)
            if not file_name[0] == '.':
                if os.path.isdir(os.path.join(CURRENT_DIRECTORY, file_name)):
                    list_store.append([
                    folder_icon, 
                    file_name, 
                    True,
                    modified_time,
                    size
                    ])
                else:
                    list_store.append([
                    file_icon, 
                    file_name, 
                    False,
                    modified_time,
                    size
                    ])
    
    def click_toggle_button(widget):
        global main_view
        if(toggletoolbutton.get_active()):
            populate_icon_store()
        else:
            populate_list_store()
    
        if toggletoolbutton.get_active():
            new_main_view = create_icon_view()
        else:
            new_main_view = create_list_view()
        replace_widget(main_view, new_main_view)
        main_view = new_main_view