2017-04-16 6 views
0

wxGlade를 사용하여 GUI를 만들었습니다. 멋진 GUI 빌더입니다. MyFrame.py 파일에서 만든 모든 이벤트를 event.py라는 별개의 파일로 수집하려고합니다. 하지만 event.py에서 내 앱을 실행할 때 "Pilihan Lainnya"를 클릭하면 대화 상자가 표시되지 않습니다. 다음은 MyFrame.py 파일입니다.wxpython에서 다른 클래스의 이벤트를 별도의 파일로 처리하는 방법은 무엇입니까?

# generated by wxGlade 9a4613e7dab8 on Sun Apr 16 17:54:01 2017 
# 

import wx 
# begin wxGlade: dependencies 
import wx.grid 
# end wxGlade 

# begin wxGlade: extracode 
# end wxGlade 


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

     # Menu Bar 
     self.frame_menubar = wx.MenuBar() 
     wxglade_tmp_menu = wx.Menu() 
     wxglade_tmp_menu.Append(wx.ID_ANY, "item", "") 
     wxglade_tmp_menu.Append(wx.ID_ANY, "item", "") 
     self.frame_menubar.Append(wxglade_tmp_menu, "item") 
     wxglade_tmp_menu = wx.Menu() 
     wxglade_tmp_menu.Append(wx.ID_ANY, "item", "") 
     wxglade_tmp_menu.Append(wx.ID_ANY, "item", "") 
     self.frame_menubar.Append(wxglade_tmp_menu, "item") 
     wxglade_tmp_menu = wx.Menu() 
     wxglade_tmp_menu.Append(wx.ID_ANY, "item", "") 
     self.frame_menubar.Append(wxglade_tmp_menu, "item") 
     self.SetMenuBar(self.frame_menubar) 
     # Menu Bar end 
     self.frame_statusbar = self.CreateStatusBar(1) 

     # Tool Bar 
     self.frame_toolbar = wx.ToolBar(self, -1, style=wx.TB_HORIZONTAL | wx.TB_NOICONS | wx.TB_TEXT) 
     self.SetToolBar(self.frame_toolbar) 
     self.frame_toolbar.AddLabelTool(wx.ID_ANY, "item", wx.NullBitmap, wx.NullBitmap, wx.ITEM_NORMAL, "", "") 
     self.frame_toolbar.AddLabelTool(wx.ID_ANY, "item", wx.NullBitmap, wx.NullBitmap, wx.ITEM_NORMAL, "", "") 
     self.frame_toolbar.AddLabelTool(wx.ID_ANY, "item", wx.NullBitmap, wx.NullBitmap, wx.ITEM_NORMAL, "", "") 
     self.frame_toolbar.AddLabelTool(wx.ID_ANY, "item", wx.NullBitmap, wx.NullBitmap, wx.ITEM_NORMAL, "", "") 
     self.frame_toolbar.AddLabelTool(wx.ID_ANY, "item", wx.NullBitmap, wx.NullBitmap, wx.ITEM_NORMAL, "", "") 
     # Tool Bar end 
     self.notebook_1 = wx.Notebook(self, wx.ID_ANY, style=wx.NB_LEFT) 
     self.Menu_Utama = wx.Panel(self.notebook_1, wx.ID_ANY) 
     self.Penjualan = wx.Panel(self.notebook_1, wx.ID_ANY) 
     self.panel_3 = wx.Panel(self.Penjualan, wx.ID_ANY) 
     self.text_ctrl_1 = wx.TextCtrl(self.Penjualan, wx.ID_ANY, "") 
     self.text_ctrl_2 = wx.TextCtrl(self.Penjualan, wx.ID_ANY, "1", style=wx.TE_CENTRE) 
     self.button_2 = wx.Button(self.Penjualan, wx.ID_ADD, "") 
     self.list_ctrl_1 = wx.ListCtrl(self.Penjualan, wx.ID_ANY, style=wx.BORDER_DEFAULT | wx.BORDER_SUNKEN | wx.LC_REPORT | wx.NO_FULL_REPAINT_ON_RESIZE) 
     self.button_3 = wx.Button(self.Penjualan, wx.ID_ANY, "Cetak & Simpan") 
     self.button_1 = wx.Button(self.Penjualan, wx.ID_ANY, "Cetak Saja") 
     self.button_4 = wx.Button(self.Penjualan, wx.ID_ANY, "Hapus") 
     self.button_5 = wx.Button(self.Penjualan, wx.ID_ANY, "Lihat") 
     self.button_6 = wx.Button(self.Penjualan, wx.ID_ANY, "Pilihan Lainnya", style=wx.BU_EXACTFIT) 
     self.Data_Barang = wx.Panel(self.notebook_1, wx.ID_ANY) 
     self.grid_1 = wx.grid.Grid(self.Data_Barang, wx.ID_ANY, size=(1, 1)) 
     self.Data_Pekerja = wx.Panel(self.notebook_1, wx.ID_ANY) 
     self.Pengaturan = wx.Panel(self.notebook_1, wx.ID_ANY) 

     self.__set_properties() 
     self.__do_layout() 

     self.Bind(wx.EVT_BUTTON, self.Input, self.button_2) 
     self.Bind(wx.EVT_BUTTON, self.pilihan_lainnya, self.button_6) 
     # end wxGlade 

    def __set_properties(self): 
     # begin wxGlade: MyFrame.__set_properties 
     self.SetTitle("frame") 
     self.SetSize((1360, 737)) 
     self.frame_statusbar.SetStatusWidths([-1]) 

     # statusbar fields 
     frame_statusbar_fields = ["Status"] 
     for i in range(len(frame_statusbar_fields)): 
      self.frame_statusbar.SetStatusText(frame_statusbar_fields[i], i) 
     self.frame_toolbar.Realize() 
     self.panel_3.SetBackgroundColour(wx.Colour(255, 255, 0)) 
     self.text_ctrl_1.SetMinSize((200, 34)) 
     self.button_3.SetMinSize((150, 34)) 
     self.button_1.SetMinSize((150, 34)) 
     self.button_4.SetMinSize((150, 34)) 
     self.button_5.SetMinSize((150, 34)) 
     self.button_6.SetMinSize((150, 34)) 
     self.grid_1.CreateGrid(10, 5) 
     self.grid_1.EnableEditing(0) 
     self.grid_1.SetColLabelValue(0, "KODE BARANG") 
     self.grid_1.SetColSize(0, 150) 
     self.grid_1.SetColLabelValue(1, "NAMA BARANG") 
     self.grid_1.SetColSize(1, 300) 
     self.grid_1.SetColLabelValue(2, "SATUAN") 
     self.grid_1.SetColSize(2, 75) 
     self.grid_1.SetColLabelValue(3, " HARGA\n SATUAN") 
     self.grid_1.SetColSize(3, 100) 
     self.grid_1.SetColLabelValue(4, "KETERANGAN") 
     self.grid_1.SetColSize(4, 300) 
     self.grid_1.SetFocus() 
     self.Data_Barang.SetBackgroundColour(wx.Colour(159, 159, 95)) 
     self.Data_Pekerja.SetBackgroundColour(wx.Colour(159, 159, 95)) 
     self.Pengaturan.SetBackgroundColour(wx.Colour(159, 159, 95)) 
     self.notebook_1.SetFont(wx.Font(13, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, "")) 
     # end wxGlade 

    def __do_layout(self): 
     # begin wxGlade: MyFrame.__do_layout 
     sizer_3 = wx.BoxSizer(wx.VERTICAL) 
     sizer_8 = wx.BoxSizer(wx.VERTICAL) 
     sizer_4 = wx.BoxSizer(wx.VERTICAL) 
     sizer_5 = wx.BoxSizer(wx.HORIZONTAL) 
     grid_sizer_2 = wx.GridSizer(5, 1, 0, 0) 
     sizer_6 = wx.BoxSizer(wx.VERTICAL) 
     grid_sizer_1 = wx.FlexGridSizer(1, 7, 0, 0) 
     sizer_7 = wx.BoxSizer(wx.VERTICAL) 
     label_2 = wx.StaticText(self, wx.ID_ANY, "APLIKASI PENJUALAN KASIR CANGGIH") 
     label_2.SetFont(wx.Font(15, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, "")) 
     sizer_3.Add(label_2, 0, wx.ALIGN_CENTER, 0) 
     sizer_6.Add((0, 0), 0, 0, 0) 
     label_5 = wx.StaticText(self.panel_3, wx.ID_ANY, "0", style=wx.ALIGN_CENTER | wx.ALIGN_RIGHT) 
     label_5.SetFont(wx.Font(50, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, "")) 
     sizer_7.Add(label_5, 1, wx.ALIGN_RIGHT, 0) 
     self.panel_3.SetSizer(sizer_7) 
     sizer_6.Add(self.panel_3, 1, wx.EXPAND, 0) 
     label_1 = wx.StaticText(self.Penjualan, wx.ID_ANY, "Kode Barang") 
     grid_sizer_1.Add(label_1, 0, wx.ALIGN_CENTER | wx.LEFT, 8) 
     grid_sizer_1.Add(self.text_ctrl_1, 0, wx.LEFT | wx.RIGHT, 8) 
     label_3 = wx.StaticText(self.Penjualan, wx.ID_ANY, "Jumlah") 
     grid_sizer_1.Add(label_3, 0, wx.ALIGN_CENTER, 0) 
     grid_sizer_1.Add(self.text_ctrl_2, 0, wx.ALIGN_CENTER | wx.LEFT | wx.RIGHT, 8) 
     grid_sizer_1.Add(self.button_2, 0, wx.RIGHT, 8) 
     sizer_6.Add(grid_sizer_1, 0, wx.EXPAND, 0) 
     sizer_4.Add(sizer_6, 1, wx.EXPAND, 0) 
     sizer_5.Add(self.list_ctrl_1, 5, wx.EXPAND, 0) 
     grid_sizer_2.Add(self.button_3, 0, 0, 0) 
     grid_sizer_2.Add(self.button_1, 0, 0, 0) 
     grid_sizer_2.Add(self.button_4, 0, 0, 0) 
     grid_sizer_2.Add(self.button_5, 0, 0, 0) 
     grid_sizer_2.Add(self.button_6, 0, 0, 0) 
     sizer_5.Add(grid_sizer_2, 0, wx.LEFT | wx.RIGHT, 10) 
     sizer_4.Add(sizer_5, 4, wx.EXPAND, 0) 
     self.Penjualan.SetSizer(sizer_4) 
     sizer_8.Add((0, 0), 0, 0, 0) 
     sizer_8.Add(self.grid_1, 3, wx.EXPAND, 0) 
     self.Data_Barang.SetSizer(sizer_8) 
     self.notebook_1.AddPage(self.Menu_Utama, "Menu Utama") 
     self.notebook_1.AddPage(self.Penjualan, "Penjualan") 
     self.notebook_1.AddPage(self.Data_Barang, "Data Barang") 
     self.notebook_1.AddPage(self.Data_Pekerja, "Data Pekerja") 
     self.notebook_1.AddPage(self.Pengaturan, "Pengaturan") 
     sizer_3.Add(self.notebook_1, 5, wx.ALIGN_CENTER | wx.EXPAND, 0) 
     self.SetSizer(sizer_3) 
     self.Layout() 
     self.Centre() 
     self.SetSize((1360, 737)) 
     # end wxGlade 

    def Input(self, event): # wxGlade: MyFrame.<event_handler> 
     print("Event handler 'Input' not implemented!") 
     event.Skip() 

    def pilihan_lainnya(self, event): # wxGlade: MyFrame.<event_handler> 
     print("Event handler 'pilihan_lainnya' not implemented!") 
     print("I want to make the event could be triggered from event.py") 
     event.Skip() 

# end of class MyFrame 

이 나의 다른 파일이이 MyDialog.py라는 이름의 파일입니다 app.py

# generated by wxGlade 9a4613e7dab8 on Sun Apr 16 17:59:07 2017 


# This is an automatically generated file. 
# Manual changes will be overwritten without warning! 

import wx 
from MyFrame import MyFrame 

class MyApp(wx.App): 
    def OnInit(self): 
     frame = MyFrame(None, wx.ID_ANY, "") 
     self.SetTopWindow(frame) 
     frame.Show() 
     return True 

# end of class MyApp 

if __name__ == "__main__": 
    app = MyApp(0) 
    app.MainLoop() 

지정됩니다. 메인 프레임에서 버튼을 누르면 표시 할 대화 프레임입니다.

# -*- coding: UTF-8 -*- 
# 
# generated by wxGlade 9a4613e7dab8 on Sat Apr 15 11:29:39 2017 
# 

import wx 
# begin wxGlade: dependencies 
# end wxGlade 

# begin wxGlade: extracode 
# end wxGlade 
class MyDialog(wx.Dialog): 
    def __init__(self, *args, **kwds): 
     # begin wxGlade: MyDialog.__init__ 
     kwds["style"] = wx.DEFAULT_DIALOG_STYLE 
     wx.Dialog.__init__(self, *args, **kwds) 
     self.button_7 = wx.Button(self, wx.ID_ANY, "button_7") 
     self.button_8 = wx.Button(self, wx.ID_ANY, "button_7") 
     self.button_9 = wx.Button(self, wx.ID_ANY, "button_7") 
     self.button_10 = wx.Button(self, wx.ID_ANY, "button_7") 

     self.__set_properties() 
     self.__do_layout() 
     # end wxGlade 

    def __set_properties(self): 
     # begin wxGlade: MyDialog.__set_properties 
     self.SetTitle("dialog") 
     self.button_7.SetMinSize((125, 64)) 
     self.button_8.SetMinSize((125, 64)) 
     self.button_9.SetMinSize((125, 64)) 
     self.button_10.SetMinSize((125, 64)) 
     # end wxGlade 

    def __do_layout(self): 
     # begin wxGlade: MyDialog.__do_layout 
     sizer_2 = wx.BoxSizer(wx.VERTICAL) 
     grid_sizer_3 = wx.FlexGridSizer(2, 2, 0, 0) 
     label_4 = wx.StaticText(self, wx.ID_ANY, "Pilihan anda ?") 
     sizer_2.Add(label_4, 0, wx.ALIGN_CENTER, 0) 
     grid_sizer_3.Add(self.button_7, 0, wx.ALL, 5) 
     grid_sizer_3.Add(self.button_8, 0, wx.ALL, 5) 
     grid_sizer_3.Add(self.button_9, 0, wx.ALL, 5) 
     grid_sizer_3.Add(self.button_10, 0, wx.ALL, 5) 
     sizer_2.Add(grid_sizer_3, 2, wx.EXPAND, 0) 
     self.SetSizer(sizer_2) 
     sizer_2.Fit(self) 
     self.Layout() 
     # end wxGlade 

# end of class MyDialog 

이 마지막 파일은 event.py입니다.이 파일에서 이벤트 핸들러를 호출하면됩니다. 나는 그것을 할 수 없다. 나는 wxformbuilder를 사용할 수 있고 상속 된 클래스의 기능을 사용하여 이것을 처리 할 수 ​​있다는 것을 알고있다. 그러나 wxGlade를 사용하고 싶습니다.이 도구는이 도구를 제외하고는 내 필요에보다 유연하고 적합합니다.

self.Bind(wx.EVT_BUTTON, self.pilihan_lainnya, self.button_6) 

는 다음과 같이 기록한다 :

self.button_6.Bind(wx.EVT_BUTTON, self.pilihan_lainnya, self.button_6) 

나는이 컴파일 된 것을 실제로 놀랍 실행 ... EVT_BUTTON me`에게

#!usr/bin/env python 
# -*- coding: utf-8 -*- 
#import MyFrame 
import MyDialog 
import wx 
import app 

class AplikasiRun(app.MyApp): 

    def __init__(self): 
     super(AplikasiRun,self).__init__() 

    def pilihan_lainnya(self,event): 
     print "this is working" 
     self.buka = MyDialog.MyDialog(None, wx.ID_ANY, "") 

    def sukasuka(): 
     ###I don't use this for now ### 
     pass 

t = AplikasiRun() 
t.MainLoop() 
+1

Bind() 호출이 표시되지 않습니다. 전체 코드를 게시하십시오. – Igor

+0

나는 두 가지를 가졌지 만 초점을 맞춘 것은 self.Bind (wx.EVT_BUTTON, self.pilihan_lainnya, self.button_6) –

+0

예제를 게시하십시오. 코드 조각을 넣지 마십시오. 우리는 당신에 대해 신경 쓰지 않습니다. 우리는 당신이 문제를 해결할 수 있도록 돕고 싶지만, 중요한 정보를 가지고 있기 때문에 그렇게 할 수는 없습니다. – Igor

답변

0

이 코드 조각을 도와주세요 프레임이 아닌 버튼에 바인딩되어야합니다.

+0

python event.py를 실행하면 메인 프레임의 GUI가 표시되지만 "pilihan lainnya"를 클릭하면 MyDialog.py 파일의 Dialog 프레임이 표시되지 않습니다. .. –

+0

작동하지 않습니다 .. event.py 에서이 응용 프로그램을 실행하는 방법,이 파일에 대한 이벤트 처리기를 사용할 수 있습니까? –