Из загрузочных приложений создайте новую запись для запуска, в которой введите команду как
bash -c 'nautilus "/path/to/folder"'
Одно решение (но только для активации с одним щелчком мыши) имеет смысл использовать сигнал selection_changed IconView (поскольку выбор IconView основан на одном клике).
Образец, который предполагает рабочий сигнал on_item_activated, будет:
def on_icon_view_selection_changed(self, widget):
self.on_item_activated(widget, widget.get_selected_items()[0])
Кажется, вы изучите ограничения Gtk в последнее время: -)
Прежде всего, ответ dobeys кажется правильным.
Дерево и список-магазины - хороший выбор для коллекций , Большие количества данных, которые идентичны по типу, но различаются по содержанию (например, музыкальная коллекция, в которой каждая часть имеет художника, альбом, название, но имя фактического исполнителя, название альбома, название названия изменяется).
. Хорошая вещь об этих виджетах заключается в том, что они легко сортируются, многие элементы могут быть выбраны (например, в режиме «резиновой полосы»), и вам нужно относительно немного строк кода, чтобы добавить тысячи похожих элементов ,
Изменение способа, которым TreeView или ListView ведет себя к кликам / зависанию и т. д. на уровне каждого приложения, является плохой идеей, потому что это противоречит тому, как пользователи ожидают, что ваше приложение будет вести себя. Вы нашли это на основе реакции, которую вы описали в своем вопросе.
Однако ваша проблема заключается в том, что пользователи не понимали, что ваш виджет является TreeView / ListView, вместо этого они думали, что это несколько кнопок. И это, кажется, имеет смысл, основываясь на вашем скриншоте. Кнопки
предназначены для запуска действия (например, остановки, воспроизведения, паузы) или взаимодействия с программой (например, «ОК», «Отмена») или даже действия в качестве ссылки на другое представление (см. LinkButton). У них обычно нет (абстрактного) объекта или предмета, связанных с ним (например, «Сэмми Дэвис младший» от «Movits!» Из альбома «Из головы»).
Итак, хотя неконфигурируемое поведение кликов является недостатком gtk, оно должно в любом случае быть только на глобальном уровне для каждого пользователя.
Вы хотите, вероятно, сетку с кнопками . (Кнопки также могут содержать значки).
Кажется, вы изучите ограничения Gtk в последнее время: -)
Прежде всего, ответ dobeys кажется правильным.
Дерево и список-магазины - хороший выбор для коллекций , Большие количества данных, которые идентичны по типу, но различаются по содержанию (например, музыкальная коллекция, в которой каждая часть имеет художника, альбом, название, но имя фактического исполнителя, название альбома, название названия изменяется).
. Хорошая вещь об этих виджетах заключается в том, что они легко сортируются, многие элементы могут быть выбраны (например, в режиме «резиновой полосы»), и вам нужно относительно немного строк кода, чтобы добавить тысячи похожих элементов ,
Изменение способа, которым TreeView или ListView ведет себя к кликам / зависанию и т. д. на уровне каждого приложения, является плохой идеей, потому что это противоречит тому, как пользователи ожидают, что ваше приложение будет вести себя. Вы нашли это на основе реакции, которую вы описали в своем вопросе.
Однако ваша проблема заключается в том, что пользователи не понимали, что ваш виджет является TreeView / ListView, вместо этого они думали, что это несколько кнопок. И это, кажется, имеет смысл, основываясь на вашем скриншоте. Кнопки
предназначены для запуска действия (например, остановки, воспроизведения, паузы) или взаимодействия с программой (например, «ОК», «Отмена») или даже действия в качестве ссылки на другое представление (см. LinkButton). У них обычно нет (абстрактного) объекта или предмета, связанных с ним (например, «Сэмми Дэвис младший» от «Movits!» Из альбома «Из головы»).
Итак, хотя неконфигурируемое поведение кликов является недостатком gtk, оно должно в любом случае быть только на глобальном уровне для каждого пользователя.
Вы хотите, вероятно, сетку с кнопками . (Кнопки также могут содержать значки).
Кажется, вы изучите ограничения Gtk в последнее время: -)
Прежде всего, ответ dobeys кажется правильным.
Дерево и список-магазины - хороший выбор для коллекций , Большие количества данных, которые идентичны по типу, но различаются по содержанию (например, музыкальная коллекция, в которой каждая часть имеет художника, альбом, название, но имя фактического исполнителя, название альбома, название названия изменяется).
. Хорошая вещь об этих виджетах заключается в том, что они легко сортируются, многие элементы могут быть выбраны (например, в режиме «резиновой полосы»), и вам нужно относительно немного строк кода, чтобы добавить тысячи похожих элементов ,
Изменение способа, которым TreeView или ListView ведет себя к кликам / зависанию и т. д. на уровне каждого приложения, является плохой идеей, потому что это противоречит тому, как пользователи ожидают, что ваше приложение будет вести себя. Вы нашли это на основе реакции, которую вы описали в своем вопросе.
Однако ваша проблема заключается в том, что пользователи не понимали, что ваш виджет является TreeView / ListView, вместо этого они думали, что это несколько кнопок. И это, кажется, имеет смысл, основываясь на вашем скриншоте. Кнопки
предназначены для запуска действия (например, остановки, воспроизведения, паузы) или взаимодействия с программой (например, «ОК», «Отмена») или даже действия в качестве ссылки на другое представление (см. LinkButton). У них обычно нет (абстрактного) объекта или предмета, связанных с ним (например, «Сэмми Дэвис младший» от «Movits!» Из альбома «Из головы»).
Итак, хотя неконфигурируемое поведение кликов является недостатком gtk, оно должно в любом случае быть только на глобальном уровне для каждого пользователя.
Вы хотите, вероятно, сетку с кнопками . (Кнопки также могут содержать значки).
Кажется, вы изучите ограничения Gtk в последнее время: -)
Прежде всего, ответ dobeys кажется правильным.
Дерево и список-магазины - хороший выбор для коллекций , Большие количества данных, которые идентичны по типу, но различаются по содержанию (например, музыкальная коллекция, в которой каждая часть имеет художника, альбом, название, но имя фактического исполнителя, название альбома, название названия изменяется).
. Хорошая вещь об этих виджетах заключается в том, что они легко сортируются, многие элементы могут быть выбраны (например, в режиме «резиновой полосы»), и вам нужно относительно немного строк кода, чтобы добавить тысячи похожих элементов ,
Изменение способа, которым TreeView или ListView ведет себя к кликам / зависанию и т. д. на уровне каждого приложения, является плохой идеей, потому что это противоречит тому, как пользователи ожидают, что ваше приложение будет вести себя. Вы нашли это на основе реакции, которую вы описали в своем вопросе.
Однако ваша проблема заключается в том, что пользователи не понимали, что ваш виджет является TreeView / ListView, вместо этого они думали, что это несколько кнопок. И это, кажется, имеет смысл, основываясь на вашем скриншоте. Кнопки
предназначены для запуска действия (например, остановки, воспроизведения, паузы) или взаимодействия с программой (например, «ОК», «Отмена») или даже действия в качестве ссылки на другое представление (см. LinkButton). У них обычно нет (абстрактного) объекта или предмета, связанных с ним (например, «Сэмми Дэвис младший» от «Movits!» Из альбома «Из головы»).
Итак, хотя неконфигурируемое поведение кликов является недостатком gtk, оно должно в любом случае быть только на глобальном уровне для каждого пользователя.
Вы хотите, вероятно, сетку с кнопками . (Кнопки также могут содержать значки).
Кажется, вы изучите ограничения Gtk в последнее время: -)
Прежде всего, ответ dobeys кажется правильным.
Дерево и список-магазины - хороший выбор для коллекций , Большие количества данных, которые идентичны по типу, но различаются по содержанию (например, музыкальная коллекция, в которой каждая часть имеет художника, альбом, название, но имя фактического исполнителя, название альбома, название названия изменяется).
. Хорошая вещь об этих виджетах заключается в том, что они легко сортируются, многие элементы могут быть выбраны (например, в режиме «резиновой полосы»), и вам нужно относительно немного строк кода, чтобы добавить тысячи похожих элементов ,
Изменение способа, которым TreeView или ListView ведет себя к кликам / зависанию и т. д. на уровне каждого приложения, является плохой идеей, потому что это противоречит тому, как пользователи ожидают, что ваше приложение будет вести себя. Вы нашли это на основе реакции, которую вы описали в своем вопросе.
Однако ваша проблема заключается в том, что пользователи не понимали, что ваш виджет является TreeView / ListView, вместо этого они думали, что это несколько кнопок. И это, кажется, имеет смысл, основываясь на вашем скриншоте. Кнопки
предназначены для запуска действия (например, остановки, воспроизведения, паузы) или взаимодействия с программой (например, «ОК», «Отмена») или даже действия в качестве ссылки на другое представление (см. LinkButton). У них обычно нет (абстрактного) объекта или предмета, связанных с ним (например, «Сэмми Дэвис младший» от «Movits!» Из альбома «Из головы»).
Итак, хотя неконфигурируемое поведение кликов является недостатком gtk, оно должно в любом случае быть только на глобальном уровне для каждого пользователя.
Вы хотите, вероятно, сетку с кнопками . (Кнопки также могут содержать значки).
Кажется, вы изучите ограничения Gtk в последнее время: -)
Прежде всего, ответ dobeys кажется правильным.
Дерево и список-магазины - хороший выбор для коллекций , Большие количества данных, которые идентичны по типу, но различаются по содержанию (например, музыкальная коллекция, в которой каждая часть имеет художника, альбом, название, но имя фактического исполнителя, название альбома, название названия изменяется).
. Хорошая вещь об этих виджетах заключается в том, что они легко сортируются, многие элементы могут быть выбраны (например, в режиме «резиновой полосы»), и вам нужно относительно немного строк кода, чтобы добавить тысячи похожих элементов ,
Изменение способа, которым TreeView или ListView ведет себя к кликам / зависанию и т. д. на уровне каждого приложения, является плохой идеей, потому что это противоречит тому, как пользователи ожидают, что ваше приложение будет вести себя. Вы нашли это на основе реакции, которую вы описали в своем вопросе.
Однако ваша проблема заключается в том, что пользователи не понимали, что ваш виджет является TreeView / ListView, вместо этого они думали, что это несколько кнопок. И это, кажется, имеет смысл, основываясь на вашем скриншоте. Кнопки
предназначены для запуска действия (например, остановки, воспроизведения, паузы) или взаимодействия с программой (например, «ОК», «Отмена») или даже действия в качестве ссылки на другое представление (см. LinkButton). У них обычно нет (абстрактного) объекта или предмета, связанных с ним (например, «Сэмми Дэвис младший» от «Movits!» Из альбома «Из головы»).
Итак, хотя неконфигурируемое поведение кликов является недостатком gtk, оно должно в любом случае быть только на глобальном уровне для каждого пользователя.
Вы хотите, вероятно, сетку с кнопками . (Кнопки также могут содержать значки).
Кажется, вы изучите ограничения Gtk в последнее время: -)
Прежде всего, ответ dobeys кажется правильным.
Дерево и список-магазины - хороший выбор для коллекций , Большие количества данных, которые идентичны по типу, но различаются по содержанию (например, музыкальная коллекция, в которой каждая часть имеет художника, альбом, название, но имя фактического исполнителя, название альбома, название названия изменяется).
. Хорошая вещь об этих виджетах заключается в том, что они легко сортируются, многие элементы могут быть выбраны (например, в режиме «резиновой полосы»), и вам нужно относительно немного строк кода, чтобы добавить тысячи похожих элементов ,
Изменение способа, которым TreeView или ListView ведет себя к кликам / зависанию и т. д. на уровне каждого приложения, является плохой идеей, потому что это противоречит тому, как пользователи ожидают, что ваше приложение будет вести себя. Вы нашли это на основе реакции, которую вы описали в своем вопросе.
Однако ваша проблема заключается в том, что пользователи не понимали, что ваш виджет является TreeView / ListView, вместо этого они думали, что это несколько кнопок. И это, кажется, имеет смысл, основываясь на вашем скриншоте. Кнопки
предназначены для запуска действия (например, остановки, воспроизведения, паузы) или взаимодействия с программой (например, «ОК», «Отмена») или даже действия в качестве ссылки на другое представление (см. LinkButton). У них обычно нет (абстрактного) объекта или предмета, связанных с ним (например, «Сэмми Дэвис младший» от «Movits!» Из альбома «Из головы»).
Итак, хотя неконфигурируемое поведение кликов является недостатком gtk, оно должно в любом случае быть только на глобальном уровне для каждого пользователя.
Вы хотите, вероятно, сетку с кнопками . (Кнопки также могут содержать значки).
Кажется, вы изучите ограничения Gtk в последнее время: -)
Прежде всего, ответ dobeys кажется правильным.
Дерево и список-магазины - хороший выбор для коллекций , Большие количества данных, которые идентичны по типу, но различаются по содержанию (например, музыкальная коллекция, в которой каждая часть имеет художника, альбом, название, но имя фактического исполнителя, название альбома, название названия изменяется).
. Хорошая вещь об этих виджетах заключается в том, что они легко сортируются, многие элементы могут быть выбраны (например, в режиме «резиновой полосы»), и вам нужно относительно немного строк кода, чтобы добавить тысячи похожих элементов ,
Изменение способа, которым TreeView или ListView ведет себя к кликам / зависанию и т. д. на уровне каждого приложения, является плохой идеей, потому что это противоречит тому, как пользователи ожидают, что ваше приложение будет вести себя. Вы нашли это на основе реакции, которую вы описали в своем вопросе.
Однако ваша проблема заключается в том, что пользователи не понимали, что ваш виджет является TreeView / ListView, вместо этого они думали, что это несколько кнопок. И это, кажется, имеет смысл, основываясь на вашем скриншоте. Кнопки
предназначены для запуска действия (например, остановки, воспроизведения, паузы) или взаимодействия с программой (например, «ОК», «Отмена») или даже действия в качестве ссылки на другое представление (см. LinkButton). У них обычно нет (абстрактного) объекта или предмета, связанных с ним (например, «Сэмми Дэвис младший» от «Movits!» Из альбома «Из головы»).
Итак, хотя неконфигурируемое поведение кликов является недостатком gtk, оно должно в любом случае быть только на глобальном уровне для каждого пользователя.
Вы хотите, вероятно, сетку с кнопками . (Кнопки также могут содержать значки).
Gtk.ListStore
, который я использую для хранения метаданных.
– David Planella
31 May 2012 в 13:26
Одно решение (но только для активации с одним щелчком мыши) имеет смысл использовать сигнал selection_changed IconView (поскольку выбор IconView основан на одном клике).
Образец, который предполагает рабочий сигнал on_item_activated, будет:
def on_icon_view_selection_changed(self, widget):
self.on_item_activated(widget, widget.get_selected_items()[0])
GtkIconView - это не расположение виджетов кнопок в таблице. Это в основном частный случай GtkTreeView, с элементами, выложенными в сетке, а не с деревом list /. Чтобы сделать подсветку элементов при наведении, я считаю, что потребуется заплата для GTK +. Патч также потребуется для добавления API для включения однократного щелчка или двойного щелчка для активации, однако эта функция может быть реализована поверх существующего API виджетов, прослушивая сигнал button_press_event в виджетах и действуя соответственно.
В последнее время вы изучаете ограничения Gtk: -)
Прежде всего, ответ dobeys кажется правильным.
Дерево и список-магазины - хороший выбор для коллекций , Большие количества данных, которые идентичны по типу, но различаются по содержанию (например, музыкальная коллекция, в которой каждая часть имеет художника, альбом, название, но имя фактического исполнителя, название альбома, название названия изменяется).
Хорошая вещь об этих виджетах заключается в том, что они легко сортируются, многие элементы могут быть выбраны (например, в режиме «резиновые полосы»), и вам нужно относительно немного строк кода, чтобы добавить тысячи подобных предметов ,
Изменение способа, которым TreeView или ListView ведет себя к кликам / зависанию и т. д. на уровне каждого приложения, является плохой идеей, потому что это противоречит тому, как пользователи ожидают, что ваше приложение будет вести себя. Вы нашли это на основе реакции, которую вы описали в своем вопросе.
Однако ваша проблема заключается в том, что пользователи не понимают, что ваш виджет является TreeView / ListView, вместо этого они думали, что это несколько кнопок. И это, кажется, имеет смысл, основываясь на вашем скриншоте. Кнопки
предназначены для запуска действия (например, остановки, воспроизведения, паузы) или связи с программой (например, «ОК», «Отмена») или даже действия в качестве ссылки на другое представление (см. LinkButton). У них обычно нет (абстрактного) объекта или предмета, связанных с ним (например, «Сэмми Дэвис младший» от «Movits!» Из альбома «Из головы»).
Итак, хотя неконфигурируемое поведение кликов является недостатком gtk, оно должно в любом случае быть только на глобальном уровне для каждого пользователя.
То, что вы хотите, вероятно, это сетка с кнопками. (Кнопки также могут содержать значки).
Вот как я заставил свой Iconview отреагировать на позицию указателя, чтобы получить эффект зависания и один щелчок левой кнопкой мыши и щелчок правой кнопкой мыши.
Вы должны активировать указатель-motion-notify для виджета, а затем конвертировать x, y позицию указателя в путь к iconview:
...
self.iconview.add_events(Gdk.EventMask.POINTER_MOTION_MASK)
self.iconview.connect("item-activated", self.iv_icon_activated)
self.iconview.connect("button-press-event", self.on_mouse_click)
self.iconview.connect("motion-notify-event", self.on_pointer_motion)
def on_pointer_motion(self, widget, event):
path= self.iconview.get_path_at_pos(event.x, event.y)
if path !=None:
self.iconview.select_path(path)
#If we're outside of an item, deselect all items (turn off highlighting)
if path == None:
self.iconview.unselect_all()
def on_mouse_click(self,widget, event):
if event.type == Gdk.EventType.BUTTON_PRESS:
path=self.iconview.get_selected_items()[0]
#if right click activate a pop-up menu
if event.button == 3 and path != None:
self.popup.popup(None, None, None, None, event.button, event.time)
#if left click, activate the item to execute
if event.button == 1 and path != None:
self.iv_icon_activated(widget, path)
GtkIconView - это не расположение виджетов кнопок в таблице. Это в основном частный случай GtkTreeView, с элементами, выложенными в сетке, а не с деревом list /. Чтобы сделать подсветку элементов при наведении, я считаю, что потребуется заплата для GTK +. Патч также потребуется для добавления API для включения однократного щелчка или двойного щелчка для активации, однако эта функция может быть реализована поверх существующего API виджетов, прослушивая сигнал button_press_event
в виджетах и действуя соответственно.
Вот как я заставил свой Iconview отреагировать на позицию указателя, чтобы получить эффект зависания, и один щелчок левой кнопкой мыши и щелчок правой кнопкой мыши.
Вы должны активировать указатель-движение-уведомление для виджета, а затем конвертировать x, y позицию указателя на путь к значку:
...
self.iconview.add_events(Gdk.EventMask.POINTER_MOTION_MASK)
self.iconview.connect("item-activated", self.iv_icon_activated)
self.iconview.connect("button-press-event", self.on_mouse_click)
self.iconview.connect("motion-notify-event", self.on_pointer_motion)
def on_pointer_motion(self, widget, event):
path= self.iconview.get_path_at_pos(event.x, event.y)
if path !=None:
self.iconview.select_path(path)
#If we're outside of an item, deselect all items (turn off highlighting)
if path == None:
self.iconview.unselect_all()
def on_mouse_click(self,widget, event):
if event.type == Gdk.EventType.BUTTON_PRESS:
path=self.iconview.get_selected_items()[0]
#if right click activate a pop-up menu
if event.button == 3 and path != None:
self.popup.popup(None, None, None, None, event.button, event.time)
#if left click, activate the item to execute
if event.button == 1 and path != None:
self.iv_icon_activated(widget, path)
Кажется, вы изучите ограничения Gtk в последнее время: -)
Прежде всего, ответ dobeys кажется правильным.
Дерево и список-магазины - хороший выбор для коллекций , Большие количества данных, которые идентичны по типу, но различаются по содержанию (например, музыкальная коллекция, в которой каждая часть имеет художника, альбом, название, но имя фактического исполнителя, название альбома, название названия изменяется).
. Хорошая вещь об этих виджетах заключается в том, что они легко сортируются, многие элементы могут быть выбраны (например, в режиме «резиновой полосы»), и вам нужно относительно немного строк кода, чтобы добавить тысячи похожих элементов ,
Изменение способа, которым TreeView или ListView ведет себя к кликам / зависанию и т. д. на уровне каждого приложения, является плохой идеей, потому что это противоречит тому, как пользователи ожидают, что ваше приложение будет вести себя. Вы нашли это на основе реакции, которую вы описали в своем вопросе.
Однако ваша проблема заключается в том, что пользователи не понимали, что ваш виджет является TreeView / ListView, вместо этого они думали, что это несколько кнопок. И это, кажется, имеет смысл, основываясь на вашем скриншоте. Кнопки
предназначены для запуска действия (например, остановки, воспроизведения, паузы) или взаимодействия с программой (например, «ОК», «Отмена») или даже действия в качестве ссылки на другое представление (см. LinkButton). У них обычно нет (абстрактного) объекта или предмета, связанных с ним (например, «Сэмми Дэвис младший» от «Movits!» Из альбома «Из головы»).
Итак, хотя неконфигурируемое поведение кликов является недостатком gtk, оно должно в любом случае быть только на глобальном уровне для каждого пользователя.
Вы хотите, вероятно, сетку с кнопками . (Кнопки также могут содержать значки).
Вот как я заставил свой Iconview отреагировать на позицию указателя, чтобы получить эффект зависания, и один щелчок левой кнопкой мыши и щелчок правой кнопкой мыши.
Вы должны активировать указатель-движение-уведомление для виджета, а затем конвертировать x, y позицию указателя на путь к значку:
...
self.iconview.add_events(Gdk.EventMask.POINTER_MOTION_MASK)
self.iconview.connect("item-activated", self.iv_icon_activated)
self.iconview.connect("button-press-event", self.on_mouse_click)
self.iconview.connect("motion-notify-event", self.on_pointer_motion)
def on_pointer_motion(self, widget, event):
path= self.iconview.get_path_at_pos(event.x, event.y)
if path !=None:
self.iconview.select_path(path)
#If we're outside of an item, deselect all items (turn off highlighting)
if path == None:
self.iconview.unselect_all()
def on_mouse_click(self,widget, event):
if event.type == Gdk.EventType.BUTTON_PRESS:
path=self.iconview.get_selected_items()[0]
#if right click activate a pop-up menu
if event.button == 3 and path != None:
self.popup.popup(None, None, None, None, event.button, event.time)
#if left click, activate the item to execute
if event.button == 1 and path != None:
self.iv_icon_activated(widget, path)
GtkIconView - это не расположение виджетов кнопок в таблице. Это в основном частный случай GtkTreeView, с элементами, выложенными в сетке, а не с деревом list /. Чтобы сделать подсветку элементов при наведении, я считаю, что потребуется заплата для GTK +. Патч также потребуется для добавления API для включения однократного щелчка или двойного щелчка для активации, однако эта функция может быть реализована поверх существующего API виджетов, прослушивая сигнал button_press_event
в виджетах и действуя соответственно.
Вот как я заставил свой Iconview отреагировать на позицию указателя, чтобы получить эффект зависания, и один щелчок левой кнопкой мыши и щелчок правой кнопкой мыши.
Вы должны активировать указатель-движение-уведомление для виджета, а затем конвертировать x, y позицию указателя на путь к значку:
...
self.iconview.add_events(Gdk.EventMask.POINTER_MOTION_MASK)
self.iconview.connect("item-activated", self.iv_icon_activated)
self.iconview.connect("button-press-event", self.on_mouse_click)
self.iconview.connect("motion-notify-event", self.on_pointer_motion)
def on_pointer_motion(self, widget, event):
path= self.iconview.get_path_at_pos(event.x, event.y)
if path !=None:
self.iconview.select_path(path)
#If we're outside of an item, deselect all items (turn off highlighting)
if path == None:
self.iconview.unselect_all()
def on_mouse_click(self,widget, event):
if event.type == Gdk.EventType.BUTTON_PRESS:
path=self.iconview.get_selected_items()[0]
#if right click activate a pop-up menu
if event.button == 3 and path != None:
self.popup.popup(None, None, None, None, event.button, event.time)
#if left click, activate the item to execute
if event.button == 1 and path != None:
self.iv_icon_activated(widget, path)
GtkIconView - это не расположение виджетов кнопок в таблице. Это в основном частный случай GtkTreeView, с элементами, выложенными в сетке, а не с деревом list /. Чтобы сделать подсветку элементов при наведении, я считаю, что потребуется заплата для GTK +. Патч также потребуется для добавления API для включения однократного щелчка или двойного щелчка для активации, однако эта функция может быть реализована поверх существующего API виджетов, прослушивая сигнал button_press_event
в виджетах и действуя соответственно.
Вот как я заставил свой Iconview отреагировать на позицию указателя, чтобы получить эффект зависания, и один щелчок левой кнопкой мыши и щелчок правой кнопкой мыши.
Вы должны активировать указатель-движение-уведомление для виджета, а затем конвертировать x, y позицию указателя на путь к значку:
...
self.iconview.add_events(Gdk.EventMask.POINTER_MOTION_MASK)
self.iconview.connect("item-activated", self.iv_icon_activated)
self.iconview.connect("button-press-event", self.on_mouse_click)
self.iconview.connect("motion-notify-event", self.on_pointer_motion)
def on_pointer_motion(self, widget, event):
path= self.iconview.get_path_at_pos(event.x, event.y)
if path !=None:
self.iconview.select_path(path)
#If we're outside of an item, deselect all items (turn off highlighting)
if path == None:
self.iconview.unselect_all()
def on_mouse_click(self,widget, event):
if event.type == Gdk.EventType.BUTTON_PRESS:
path=self.iconview.get_selected_items()[0]
#if right click activate a pop-up menu
if event.button == 3 and path != None:
self.popup.popup(None, None, None, None, event.button, event.time)
#if left click, activate the item to execute
if event.button == 1 and path != None:
self.iv_icon_activated(widget, path)
Вот как я заставил свой Iconview отреагировать на позицию указателя, чтобы получить эффект зависания, и один щелчок левой кнопкой мыши и щелчок правой кнопкой мыши.
Вы должны активировать указатель-движение-уведомление для виджета, а затем конвертировать x, y позицию указателя на путь к значку:
...
self.iconview.add_events(Gdk.EventMask.POINTER_MOTION_MASK)
self.iconview.connect("item-activated", self.iv_icon_activated)
self.iconview.connect("button-press-event", self.on_mouse_click)
self.iconview.connect("motion-notify-event", self.on_pointer_motion)
def on_pointer_motion(self, widget, event):
path= self.iconview.get_path_at_pos(event.x, event.y)
if path !=None:
self.iconview.select_path(path)
#If we're outside of an item, deselect all items (turn off highlighting)
if path == None:
self.iconview.unselect_all()
def on_mouse_click(self,widget, event):
if event.type == Gdk.EventType.BUTTON_PRESS:
path=self.iconview.get_selected_items()[0]
#if right click activate a pop-up menu
if event.button == 3 and path != None:
self.popup.popup(None, None, None, None, event.button, event.time)
#if left click, activate the item to execute
if event.button == 1 and path != None:
self.iv_icon_activated(widget, path)
GtkIconView - это не расположение виджетов кнопок в таблице. Это в основном частный случай GtkTreeView, с элементами, выложенными в сетке, а не с деревом list /. Чтобы сделать подсветку элементов при наведении, я считаю, что потребуется заплата для GTK +. Патч также потребуется для добавления API для включения однократного щелчка или двойного щелчка для активации, однако эта функция может быть реализована поверх существующего API виджетов, прослушивая сигнал button_press_event
в виджетах и действуя соответственно.
Вот как я заставил свой Iconview отреагировать на позицию указателя, чтобы получить эффект зависания, и один щелчок левой кнопкой мыши и щелчок правой кнопкой мыши.
Вы должны активировать указатель-движение-уведомление для виджета, а затем конвертировать x, y позицию указателя на путь к значку:
...
self.iconview.add_events(Gdk.EventMask.POINTER_MOTION_MASK)
self.iconview.connect("item-activated", self.iv_icon_activated)
self.iconview.connect("button-press-event", self.on_mouse_click)
self.iconview.connect("motion-notify-event", self.on_pointer_motion)
def on_pointer_motion(self, widget, event):
path= self.iconview.get_path_at_pos(event.x, event.y)
if path !=None:
self.iconview.select_path(path)
#If we're outside of an item, deselect all items (turn off highlighting)
if path == None:
self.iconview.unselect_all()
def on_mouse_click(self,widget, event):
if event.type == Gdk.EventType.BUTTON_PRESS:
path=self.iconview.get_selected_items()[0]
#if right click activate a pop-up menu
if event.button == 3 and path != None:
self.popup.popup(None, None, None, None, event.button, event.time)
#if left click, activate the item to execute
if event.button == 1 and path != None:
self.iv_icon_activated(widget, path)
Вот как я заставил свой Iconview отреагировать на позицию указателя, чтобы получить эффект зависания, и один щелчок левой кнопкой мыши и щелчок правой кнопкой мыши.
Вы должны активировать указатель-движение-уведомление для виджета, а затем конвертировать x, y позицию указателя на путь к значку:
...
self.iconview.add_events(Gdk.EventMask.POINTER_MOTION_MASK)
self.iconview.connect("item-activated", self.iv_icon_activated)
self.iconview.connect("button-press-event", self.on_mouse_click)
self.iconview.connect("motion-notify-event", self.on_pointer_motion)
def on_pointer_motion(self, widget, event):
path= self.iconview.get_path_at_pos(event.x, event.y)
if path !=None:
self.iconview.select_path(path)
#If we're outside of an item, deselect all items (turn off highlighting)
if path == None:
self.iconview.unselect_all()
def on_mouse_click(self,widget, event):
if event.type == Gdk.EventType.BUTTON_PRESS:
path=self.iconview.get_selected_items()[0]
#if right click activate a pop-up menu
if event.button == 3 and path != None:
self.popup.popup(None, None, None, None, event.button, event.time)
#if left click, activate the item to execute
if event.button == 1 and path != None:
self.iv_icon_activated(widget, path)
GtkIconView - это не расположение виджетов кнопок в таблице. Это в основном частный случай GtkTreeView, с элементами, выложенными в сетке, а не с деревом list /. Чтобы сделать подсветку элементов при наведении, я считаю, что потребуется заплата для GTK +. Патч также потребуется для добавления API для включения однократного щелчка или двойного щелчка для активации, однако эта функция может быть реализована поверх существующего API виджетов, прослушивая сигнал button_press_event
в виджетах и действуя соответственно.
button-press-event
, я не уверен, что смогу использовать это. Если я правильно ее понимаю, проблема в том, что, когда я нажимаю на значок и перехватывает button-press-event
, я не буду знать, какой из них он есть, поскольку идентификатор элемента базовой модели не будет передан в обратном вызове, как это делается для обратного вызова on_iconview1_view_item_activated
, который я использую прямо сейчас.
– David Planella
31 May 2012 в 16:08
Вот как я заставил свой Iconview отреагировать на позицию указателя, чтобы получить эффект зависания, и один щелчок левой кнопкой мыши и щелчок правой кнопкой мыши.
Вы должны активировать указатель-движение-уведомление для виджета, а затем конвертировать x, y позицию указателя на путь к значку:
...
self.iconview.add_events(Gdk.EventMask.POINTER_MOTION_MASK)
self.iconview.connect("item-activated", self.iv_icon_activated)
self.iconview.connect("button-press-event", self.on_mouse_click)
self.iconview.connect("motion-notify-event", self.on_pointer_motion)
def on_pointer_motion(self, widget, event):
path= self.iconview.get_path_at_pos(event.x, event.y)
if path !=None:
self.iconview.select_path(path)
#If we're outside of an item, deselect all items (turn off highlighting)
if path == None:
self.iconview.unselect_all()
def on_mouse_click(self,widget, event):
if event.type == Gdk.EventType.BUTTON_PRESS:
path=self.iconview.get_selected_items()[0]
#if right click activate a pop-up menu
if event.button == 3 and path != None:
self.popup.popup(None, None, None, None, event.button, event.time)
#if left click, activate the item to execute
if event.button == 1 and path != None:
self.iv_icon_activated(widget, path)