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

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

03.05.2018, 11:49. Показов 1287. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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
1292 / 909 / 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
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
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru