Найти - Пользователи
Полная версия: Проблема, не могу привязать события для меню
Начало » GUI » Проблема, не могу привязать события для меню
1
Denis Yagovkin
Накидал GUI в wxGlade и теперь не могу привязать события для меню :(
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
# generated by wxGlade 0.6.3 on Thu Jan 13 16:15:13 2011

import wx

# begin wxGlade: extracode
# end wxGlade



class MainFrame(wx.Frame):
def __init__(self, *args, **kwds):
# begin wxGlade: MainFrame.__init__
kwds["style"] = wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)

# Menu Bar
self.window_menubar = wx.MenuBar()
self.f_file = wx.Menu()
self.f_close = wx.MenuItem(self.f_file, wx.NewId(), "Close", "Close program", wx.ITEM_NORMAL)
self.f_file.AppendItem(self.f_close)
self.window_menubar.Append(self.f_file, "File")
self.p_property = wx.Menu()
self.window_menubar.Append(self.p_property, "Property")
self.h_help = wx.Menu()
self.h_about = wx.MenuItem(self.h_help, wx.NewId(), "About", "", wx.ITEM_NORMAL)
self.h_help.AppendItem(self.h_about)
self.window_menubar.Append(self.h_help, "Help")
self.SetMenuBar(self.window_menubar)
# Menu Bar end
self.window_statusbar = self.CreateStatusBar(1, 0)
self.free_soft = wx.Button(self, -1, "Free Soft")
self.share_soft = wx.Button(self, -1, "Shareware")
self.current = wx.Button(self, -1, "Current")
self.find_soft = wx.TextCtrl(self, -1, "")
self.list_soft = wx.ListCtrl(self, -1, style=wx.LC_ICON|wx.LC_NO_HEADER|wx.SIMPLE_BORDER)

self.__set_properties()
self.__do_layout()
self.Bind (wx.EVT_CLOSE, self.onClose)
# end wxGlade

def __set_properties(self):
# begin wxGlade: MainFrame.__set_properties
self.SetTitle("Lancher")
_icon = wx.EmptyIcon()
_icon.CopyFromBitmap(wx.Bitmap("icon.png", wx.BITMAP_TYPE_ANY))
self.SetIcon(_icon)
self.SetSize((600, 400))
self.window_statusbar.SetStatusWidths([-1])
# statusbar fields
window_statusbar_fields = ["Create to wxGlade"]
for i in range(len(window_statusbar_fields)):
self.window_statusbar.SetStatusText(window_statusbar_fields[i], i)
# end wxGlade

def __do_layout(self):
# begin wxGlade: MainFrame.__do_layout
sizer_1 = wx.BoxSizer(wx.HORIZONTAL)
sizer_3 = wx.BoxSizer(wx.VERTICAL)
sizer_2 = wx.BoxSizer(wx.VERTICAL)
sizer_4 = wx.BoxSizer(wx.VERTICAL)
sizer_4.Add(self.free_soft, 0, wx.TOP, 26)
sizer_2.Add(sizer_4, 1, wx.ALIGN_CENTER_HORIZONTAL, 0)
sizer_2.Add(self.share_soft, 0, wx.BOTTOM|wx.ALIGN_CENTER_HORIZONTAL, 10)
sizer_2.Add(self.current, 0, wx.BOTTOM|wx.ALIGN_CENTER_HORIZONTAL, 210)
sizer_1.Add(sizer_2, 1, wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL, 0)
sizer_3.Add(self.find_soft, 0, wx.BOTTOM|wx.ALIGN_RIGHT, 1)
sizer_3.Add(self.list_soft, 1, wx.EXPAND, 0)
sizer_1.Add(sizer_3, 5, wx.RIGHT|wx.EXPAND, 0)
self.SetSizer(sizer_1)
self.Layout()
# end wxGlade

def onClose (self, event):
# begin wxGlade: windows_menubar onClose
self.Destroy()
# end wxGlade


# end of class MainFrame


class MyApp(wx.App):
def OnInit(self):
wx.InitAllImageHandlers()
window = MainFrame(None, -1, "")
self.SetTopWindow(window)
window.Show()
return 1

# end of class MyApp

if __name__ == "__main__":
app = MyApp(0)
app.MainLoop()
Kultom
я делал вот так
     def menu(): #Создаём меню
menuFile=wx.Menu()
menuFile.Append(1, u"О программе")
menuFile.AppendSeparator()
menuFile.Append(2, u"Выход")

menuBar = wx.MenuBar()
menuBar.Append(menuFile, u"Файл")
self.SetMenuBar(menuBar)

#события меню
self.Bind(wx.EVT_MENU, self.OnAbout, id = 1)
self.Bind(wx.EVT_MENU, self.OnQuit, id = 2)


def OnQuit(self,event):
self.Close()

def OnAbout(self, event):
wx.MessageBox(about)
Denis Yagovkin
Спасибо за совет по пробую по этому способу! :)
Denis Yagovkin
Я привязал события теперь не могу id назначить для каждого
 
def makeMenu (self):
# Menu Bar
self.window_menubar = wx.MenuBar()
self.f_file = wx.Menu()
self.f_close = wx.MenuItem(self.f_file, wx.ID_CLOSE, "Close", "Close program", wx.ITEM_NORMAL)
self.f_file.AppendItem(self.f_close)
self.Bind (wx.EVT_MENU, self.onClose, id = -1)
self.window_menubar.Append(self.f_file, "File")
self.p_property = wx.Menu()
self.window_menubar.Append(self.p_property, "Property")
self.h_help = wx.Menu()
self.h_about = wx.MenuItem(self.h_help, wx.ID_ABOUT, "About", "About...", wx.ITEM_NORMAL)
self.Bind (wx.EVT_MENU, self.onAbout, id = -1)
self.h_help.AppendItem(self.h_about)
self.window_menubar.Append(self.h_help, "Help")
self.SetMenuBar(self.window_menubar)

# Menu Bar end
В этом куске программы id = -1 ставлю он почему то выполняет событие onAbout
self.f_close = wx.MenuItem(self.f_file, wx.ID_CLOSE, "Close", "Close program", wx.ITEM_NORMAL)
self.f_file.AppendItem(self.f_close)
self.Bind (wx.EVT_MENU, self.onClose, id = -1)
Kultom
id нужно указывать явно, т.е. связывать id в евентах в с id меню
Видимо wxGlade криво ка-то код генерирует. Я вручную раньше формы делал, пока не нашёл для себя wxFormBuilder. Попробуй на нём сделать форму (имхо, самый лучший дизайнер форм для wxforms)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB