Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
1

Wxpython. Фокус в дереве

03.05.2018, 11:49. Показов 1304. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет. Подскажите, пожалуйста, как сделать, чтобы при нажатии на элемент дерева ПКМ фокус был на элементе? Ниже приведен пример где фокус изменяется, когда на элемент нажимаешь ЛКМ. Код не мой, но мне требуется что-то подобное. Если в этом примере нажать ПКМ на элемент, он вроде бы как выделяется, но после того, как отпускаем ПКМ, фокус возвращается на тот элемент, который до этого был выделен с помощью ЛКМ или по умолчанию (корень).
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import wx
 
class MyFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(600, 400))
        self.splitter = wx.SplitterWindow(self, -1)
        self.leftPanel = wx.Panel(self.splitter, -1)
        self.tree = MyTree(self.leftPanel, 1, wx.DefaultPosition, (300, 300))
        self.tree.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged, id=1)
 
        self.rightPanel = wx.Panel(self.splitter, -1)
 
        self.splitter.SplitVertically(self.leftPanel, self.rightPanel)
 
        sizer = wx.BoxSizer ( )
        sizer.Add ( self.splitter, 1, wx.EXPAND )
        self.SetSizer ( sizer )
 
        self.tree.SetFocus()
 
    def OnSelChanged(self, event):
        print 'Sel Changed'
 
 
class MyTree(wx.TreeCtrl):
    def __init__(self, panel, id, pos, size):
        self.panel = panel
        wx.TreeCtrl.__init__(self, panel, id, pos=pos, size=size, style=wx.TR_HAS_BUTTONS)
 
        wx.EVT_TREE_ITEM_EXPANDING(self,-1,self.OnItemExpanding)
        wx.EVT_TREE_ITEM_COLLAPSED(self,-1,self.OnItemCollapsed)
        wx.EVT_SET_FOCUS(self,self.OnGotFocus)
 
        self.root = self.AddRoot('Root')
        self.SetPyData(self.root,0)
        self.SetItemHasChildren(self.root)
        self.Expand(self.root)
        self.SetImageList(wx.ImageList(16,16))
 
    def OnItemExpanding(self,evt):
        node = evt.GetItem()
        data = self.GetPyData(node)
        if data:
            for i in range(1,2):
                leaf = self.AppendItem(node,'%s.%s' % (data,i))
                self.SetPyData(leaf,'%s.%s' % (data,i))
        else:
            for i in range(1,2):
                leaf = self.AppendItem(node,'%s' % (i))
                self.SetPyData(leaf,'%s' % (i))
                self.SetItemHasChildren(leaf)
 
    def OnItemCollapsed(self,evt):
        self.DeleteChildren(evt.GetItem())
 
    def OnGotFocus(self,evt):
        print 'tree got focus'
        evt.Skip()
 
class MyApp(wx.App):
    def OnInit(self):
        frame = MyFrame(None, -1, "This is a test")
        frame.Show(True)
        self.SetTopWindow(frame)
        return True
 
app = MyApp(0)
app.MainLoop()
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.05.2018, 11:49
Ответы с готовыми решениями:

Wxpython. Узнать родителя в дереве
Привет. Подскажите, пожалуйста. С помощью wx.TreeCtrl построил дерево (см рисунок). Если нажать ПКМ...

Нужно написать функцию, которая проверяет содержатся ли элементы из первого дерева во втором дереве, в указанном в 1 дереве порядке
#include <iostream> #include <conio.h> using namespace std; struct node{ int n; node *l,...

Перестановка узлов в дереве - Попарная замена узлов в дереве и случайная замена узлов в дереве
Нужно реализовать два варианта сортировки дерева: 1. попарная замена узлов в дереве 2. случайная...

WxPython кодировка
Добрый вечер. Есть форма с элементом wx.TextCtrl. Пишу в этом текстовом поле текст на русском...

WxPython и asyncio
Добрый день. Подскажите можно ли в приложении wxPython использовать модуль asyncio? Как я понимаю...

2
1293 / 910 / 479
Регистрация: 05.12.2013
Сообщений: 3,074
03.05.2018, 12:11 2
Лучший ответ Сообщение было отмечено ioprst как решение

Решение

Дерево генерирует событие EVT_TREE_ITEM_RIGHT_CLICK и есть метод выбора SelectItem(self, item, select=True)
1
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
03.05.2018, 12:24  [ТС] 3
ТабуретY, спасибо, не знал про SelectItem. Помогло.
0
03.05.2018, 12:24
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.05.2018, 12:24
Помогаю со студенческими работами здесь

Python3 и wxPython
Всем привет, нужна ваша помощь. Решил написать мультиплатформенную приложение с использованием...

wxPython не устанавливается
при попытке установки wxPyтухон выдаёт такое дерьмо: как можно решить данную проблему?

Wxpython. Браузер
Привет. Нужен свой простенький браузер на wx.html2, который будет обрабатывать локальную страничку....

WxPython Threads
Добрый день. делаю обновление грида по таймеру, (через startWorker, чтобы интерфейс не "замерзал"...

Что быстрее, поиск в RB-дереве или поиск в B-дереве?
Интересует что быстрее, поиск в RB-дереве и поиск в B-дереве. Интересует также время выраженное...

Wxpython. Растянуть wx.TextCtrl
Привет, подскажите, пожалуйста, как растянуть wx.TextCtrl на все окно. В коде это переменные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Почему при инициализации массива 3х3х3 будет создано 13 одномерных массивов?
Alexander-7 16.01.2025
При инициализации многомерного массива, в данном случае трехмерного массива размерностью 3x3x3, может возникнуть путаница относительно того, как структура данных организована в памяти. Общее число. . .
Использование связки C# и PHP в корпоративной разработке и микросервисной архитектуре
InfoMaster 16.01.2025
Введение в интеграцию C# и PHP В современной корпоративной разработке все чаще возникает потребность в создании гибких и масштабируемых решений, способных эффективно решать широкий спектр. . .
Как использовать Kerio дома для управления сетью и пользователями
InfoMaster 16.01.2025
Использование технологий для улучшения повседневной жизни стало неотъемлемой частью современного быта. Одной из таких технологий является Kerio — мощный инструмент для управления сетью и. . .
Есть ли будущее у DVD и Blu-ray?
InfoMaster 16.01.2025
В эпоху стремительного развития цифровых технологий и повсеместного распространения потоковых сервисов вопрос о будущем физических носителей информации становится все более актуальным. Особенно остро. . .
Как проводить научные вычисления на Python
InfoMaster 15.01.2025
Python стал одним из наиболее востребованных языков программирования в области научных вычислений благодаря своей простоте, гибкости и обширной экосистеме специализированных библиотек. Научные. . .
Создание игры типа Minecraft на PyGame/Python: пошаговое руководство
InfoMaster 15.01.2025
В данном руководстве мы рассмотрим процесс создания игры в стиле Minecraft с использованием библиотеки PyGame на языке программирования Python. Этот проект идеально подходит как для начинающих. . .
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
Параллельное программировани­е: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru