Python 使用ToggleToolButton在ListView和IconView之间切换
我目前正在开发一个文件管理器,我已经成功地分别实现了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
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
您必须做两件事:
主视图
变量的值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