Я новичок в wxPython и хотел бы использовать его для создания простого динамического интерфейса, который условно отображает и скрывает некоторые раскрывающиеся окна, которые можно легко выполнить в jQuery.wxPython условно отображать и скрывать
Итак, из моего первого уровня, если пользователь выбирает «Op1_1», появится комбо-поле второго уровня. С другой стороны, если выбрана опция «Op1_2», в том же месте будет создан другой комбинированный блок B второго уровня.
- Вопрос 1: Я могу добавить комбо-бокс окна второго уровня на лета, но его расположение не является правильным. Из прилагаемого рисунка вы видите , он всегда смотрит в левый верхний угол. Есть ли способ переделать это?
- Вопрос 2: Если сгенерирован первый второй комбинированный блок A, то пользователь выбирает «Op1_2», теоретически, комбинированный блок B заменит поле со списком A. Но я столкнулся с ошибкой
wxGridBagSizer::Add(): An item is already at that position
. Как уничтожить ранее построенный ящик? - Вопрос 3: Есть ли способ интегрировать WxPython и JQuery, которые могли бы сделать свою жизнь проще ....
import wx
class landing_frame(wx.Frame):
def __init__(self, parent, title):
super(landing_frame, self).__init__(parent, title=title,
size=(450, 350))
self.font1 = wx.Font(18, wx.DECORATIVE, wx.ITALIC, wx.BOLD)
self.InitUI()
self.Centre()
self.Show()
def InitUI(self):
self.panel = wx.Panel(self)
self.sizer = wx.GridBagSizer(5, 5)
self.text1 = wx.StaticText(self.panel, label="Welcome!")
self.sizer.Add(self.text1, pos=(0, 0), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=15)
line = wx.StaticLine(self.panel)
self.sizer.Add(line, pos=(1, 0), span=(1, 5), flag=wx.EXPAND|wx.BOTTOM, border=10)
self.text2 = wx.StaticText(self.panel, label="First Level Dropdown")
self.sizer.Add(self.text2, pos=(2, 0), flag=wx.LEFT, border=10)
self.sampleList = ['Op1_1', 'Op1_2']
self.combo = wx.ComboBox(self.panel, 30, choices=self.sampleList)
self.combo.Bind(wx.EVT_COMBOBOX, self.EvtComboBox)
self.sizer.Add(self.combo, pos=(2, 1), span=(1, 2), flag=wx.TOP|wx.EXPAND, border=5)
self.panel.SetSizer(self.sizer)
def EvtComboBox(self, event):
self.user_choice = event.GetString()
if self.user_choice == "Op1_1":
self.sampleList_ss1 = ['Op2_1_1', 'Op2_1_2', 'Op2_1_3']
self.combo_ss1 = wx.ComboBox(self.panel, 31, choices=self.sampleList_ss1)
self.combo_ss1.Bind(wx.EVT_COMBOBOX, self.EvtComboBox)
self.sizer.Add(self.combo_ss1, pos=(3, 1), span=(1, 2), flag=wx.TOP|wx.EXPAND, border=5)
self.panel.SetSizer(self.sizer)
if self.user_choice == "Op1_2":
self.sampleList_ss2 = ['Op2_2_1', 'Op2_2_2', 'Op2_2_3']
self.combo_ss2 = wx.ComboBox(self.panel, 31, choices=self.sampleList_ss2)
self.combo_ss2.Bind(wx.EVT_COMBOBOX, self.EvtComboBox)
self.sizer.Add(self.combo_ss2, pos=(3, 1), span=(1, 2), flag=wx.TOP|wx.EXPAND, border=5)
self.panel.SetSizer(self.sizer)
if __name__ == '__main__':
app = wx.App(redirect=False, filename="mylogfile.txt")
landing_frame(None, title="Test")
app.MainLoop()
Спасибо за доказательство решения. Есть ли лучший способ заменить этот второй «комбинированный блок» другими типами элементов, например «поле ввода текста»? Кроме того, любое предложение улучшить графический интерфейс 'wxPython' более динамичный? –