Таким образом, после написания кучу мелких, личных приложений WxPython я осевших на организацию программы в серию wx.Panel() s так:получение части программы WxPython общаться друг с другом
class display(wx.Panel):
<buttons, sliders, etc>
<sizer>
...
class selector(wx.Panel):
<buttons and stuff>
<sizer>
...
Тогда я беру эти панели и засунуть их в один кадр, как дети на мастер-панели, в какой момент я могу организовать с помощью классификаторов, как так:
class mainwindow(wx.Frame):
master_panel = wx.Panel()
display = display(master_panel)
selector = selector(master_panel)
<sizers and stuff>
Моя проблема сейчас в том, что две панели нужно каким-то образом общаться друг с другом. Например, если в селекторе щелкнули что-то (например, имя файла), дисплей должен соответствующим образом обновиться.
Первое, что пришло в голову, - использовать существующую систему событий для создания собственных пользовательских событий, а затем привязать их к обработчикам внутри каждой панели, но я не уверен, что это правильный путь. Мое решение для подкласса Panel() создало проблему, которую я иначе не имел бы, или есть лучший способ справиться с этой проблемой межпанельной связи?
Это именно то, что мне нужно. Я действительно пошел и загрузил модуль отдельно, только чтобы заметить, что он фактически включен в wxPython .... – cornjuliox
Одна вещь, о которой нужно знать: хотя семантика интерфейса подразумевает, что pubsub основан на событиях, на самом деле это не событие, основанное на смысл wx-событий. Когда вы вызываете SendMessage, поток извещения распространяется полностью через код подписчика до того, как возвращается ваш запрос SendMessage. FWIW - это меня охватило удивление, когда я его обнаружил, хотя большую часть времени вам все равно. – GreenAsJade