Форум сайта python.su
Здравствуйте!
Пробую писать GUI на wxPython.
import os import wx import wx.lib.platebtn as pbtn class MainFrame(wx.Frame): def __init__(self, parent, id=-1, title="", pos=wx.DefaultPosition, size=(1000, 800), style=wx.DEFAULT_FRAME_STYLE, name="MainFrame"): super(MainFrame, self).__init__(parent, id, title, pos, size, style, name) panel = wx.Panel(self, -1) vbox = wx.BoxSizer(wx.VERTICAL) self.ToolBarPanel = ToolBar(panel, -1) self.TablePanel = Table(panel, -1) self.StatusBarPanel = StatusBar(panel, -1) vbox.Add(self.ToolBarPanel, 0, wx.EXPAND | wx.TOP, 0) vbox.Add(self.TablePanel, 1, wx.EXPAND, 0) vbox.Add(self.StatusBarPanel, 0, wx.BOTTOM | wx.EXPAND, 0) panel.SetSizer(vbox) ... class ToolBar(wx.Panel): def __init__(self, parent, ID=-1, pos=wx.DefaultPosition, size=(200, 32)): wx.Panel.__init__(self, parent, ID, pos, size) self.SetBackgroundColour('#74B4FF') # Make a BitmapButton bmp = wx.Bitmap("../UGR/icons/main_menu_24.png", wx.BITMAP_TYPE_PNG) hbox = wx.BoxSizer(wx.HORIZONTAL) style = pbtn.PB_STYLE_SQUARE | pbtn.PB_STYLE_DROPARROW bmpbtn4 = pbtn.PlateButton(self, bmp=bmp, style=style) bmpbtn4.SetPressColor(wx.Colour(205,205,205)) bmp_btn_main_menu = wx.BitmapButton(self, bitmap=bmp) bmpbtn1 = wx.BitmapButton(self, bitmap=bmp) bmpbtn2 = wx.BitmapButton(self, bitmap=bmp) bmpbtn3 = wx.BitmapButton(self, bitmap=bmp) hbox.Add(bmpbtn4, 0, wx.EXPAND | wx.RIGHT, 0) hbox.Add(bmp_btn_main_menu, 0, wx.EXPAND | wx.LEFT, 0) hbox.Add(bmpbtn1, 0, wx.EXPAND | wx.LEFT, 0) hbox.Add(bmpbtn2, 0, wx.EXPAND | wx.LEFT, 0) hbox.Add(bmpbtn3, 0, wx.EXPAND | wx.RIGHT, 0) self.SetSizer(hbox) self.popupmenu = wx.Menu() for text in "Выход".split(','): item = self.popupmenu.Append(-1, text) self.Bind(wx.EVT_MENU, self.OnPopupItemSelected, item) bmp_btn_main_menu.Bind(wx.EVT_CONTEXT_MENU, self.OnShowPopup) def OnShowPopup(self, event): pos = event.GetPosition() pos = self.ScreenToClient(pos) x = 24 - int(pos[0]) y = int(pos[1]) + (24 - int(pos[1])) pos = (x, y) self.PopupMenu(self.popupmenu, pos) def OnPopupItemSelected(self, event): item = self.popupmenu.FindItemById(event.GetId()) text = item.GetText() StatusBar.setText(StatusBar.txt) wx.MessageBox("You selected item '%s'" % text) class Table(wx.Panel): ... class StatusBar(wx.Panel): def __init__(self, parent, ID=-1, pos=wx.DefaultPosition, size=(200, 25)): wx.Panel.__init__(self, parent, ID, pos, size) self.SetBackgroundColour('#FFFFFF') self.txt = wx.TextCtrl(self, wx.ID_ANY, "") self.txt.SetFocus() self.txt.AppendText('12556') def setText(self): self.txt.AppendText('7777') class MyApp(wx.App): def OnInit(self): self.frame = MainFrame(None, title="UGR") self.SetTopWindow(self.frame) self.frame.Show() return True if __name__ == "__main__": app = MyApp(False) app.MainLoop()
Офлайн
NAGRISС какого перепугу тип StatusBar будет иметь атрибут текст. Объекты этого типа еще может быть и имеют.
StatusBar.setText(StatusBar.txt)
Офлайн
doza_and
Спасибо! за подсказку.
Переписал.
def OnPopupItemSelected(self, event): item = self.popupmenu.FindItemById(event.GetId()) text = item.GetText() StatusBar.setText(StatusBar(self), text) ... class StatusBar(wx.Panel): def __init__(self, parent, ID=-1, pos=wx.DefaultPosition, size=(200, 25)): wx.Panel.__init__(self, parent, ID, pos, size) self.SetBackgroundColour('#FFFFFF') self.txt = wx.TextCtrl(self, wx.ID_ANY, "") self.txt.SetFocus() self.txt.AppendText('12556') def setText(self, text): self.txt.AppendText(text)
Офлайн
А, для чего такой замысловатый статусбар?
Вы тренируетесь в передаче данных между классами?
Или изобретаете колесо? Так оно уже есть:
Статусбар
Офлайн
Тренировка.
И в будущем возможность писать в статусбаре команды.
Офлайн
NAGRIS
Как сделать, чтобы текст писался в уже созданное поле.
def OnPopupItemSelected(self, event): item = self.popupmenu.FindItemById(event.GetId()) text = item.GetText() self.GetParent().GetParent().StatusBarPanel.setText(self.GetParent().GetParent().StatusBarPanel.txt) wx.MessageBox("You selected item '%s'" % text)
Отредактировано leonid_10 (Июнь 16, 2016 12:38:46)
Офлайн
Спасибо!
Офлайн
Я не смог тогда обойти эту преграду.
И переписал чтобы все было в одном классе.
Не подскажите какой из двух подходов правильный?
Офлайн
NAGRISЯ не специалист в правильности, но предпочитаю писать так, чтобы самому потом можно было разобраться в написанном.
Не подскажите какой из двух подходов правильный?
Офлайн
Спасибо!
Офлайн