Событие меню wxPython - Новый файл - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь создать простую программу с графическим интерфейсом wxpython с основными функциями меню, такими как New, Open и Save.Я могу создать графический интерфейс с правильными метками, но когда я нажимаю Новый файл, программа не открывает новое окно.Я думаю, что это способ, которым я привязываю функцию New File к меню.

Вот мой код:

import wx

class david(wx.Frame):

  def __init__(self,parent,id):
    wx.Frame.__init__(self,parent,id,'wxPython Window',size=(300,200))
    panel=wx.Panel(self)

    status=self.CreateStatusBar()
    menubar=wx.MenuBar()
    file=wx.Menu()
    edit=wx.Menu()
    file.Append(wx.NewId(),"New File","This opens a new file")
    file.Append(wx.NewId(),"Open...","This opens an existing file")
    file.Append(wx.NewId(),"Save","Save the current file")
    menubar.Append(file,"File")
    menubar.Append(edit,"Edit")
    self.Bind(wx.EVT_MENU, self.NewFile, id=wx.ID_NEW)
    self.SetMenuBar(menubar)

  def NewFile(self,parent,id):
    wx.Frame.__init__(self,parent,id,'wxPython Window',size=(300,200))
    panel=wx.Panel(self)

    status=self.CreateStatusBar()
    menubar=wx.MenuBar()
    file=wx.Menu()
    edit=wx.Menu()
    file.Append(wx.NewId(),"New File","This opens a new file")
    file.Append(wx.NewId(),"Open...","This opens an existing file")
    file.Append(wx.NewId(),"Save","Save the current file")
    menubar.Append(file,"File")
    menubar.Append(edit,"Edit")
    self.SetMenuBar(menubar)


if __name__=='__main__':
  app=wx.App()
  frame=david(parent=None,id=-1)
  frame.Show()
  app.MainLoop()

1 Ответ

0 голосов
/ 11 сентября 2018

Похоже, вы использовали Bind неправильно. id=wx.ID_NEW сделает так, чтобы событие было привязано к новому идентификатору, который ни на что не ссылается. Однако вы хотите использовать идентификатор элемента меню для файла, который вы можете получить при использовании метода Append.

  ...
  newFileID = file.Append(wx.NewId(), "New File", "This opens a new file")
  ...
  self.Bind(wx.EVT_MENU, self.NewFile, newFileID)
  ...

Кроме того, метод обработчика событий NewFile должен иметь два только один параметр event, описанный здесь . Теперь, чтобы открыть новое окно, есть много способов сделать это, но самым простым было бы использовать кадр, который вы уже написали. Обратите внимание на параметры функции, которые я использую.

  def NewFile(self, event):
    frame = david(parent=None, id=-1)
    frame.Show()

Примечание к стилю: попробуйте и используйте пробелы при назначении значений и значений в скобках. См. this для хорошего введения в wxPython.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...