2017-04-16 64 views
0

我使用wxGlade創建GUI,這是一個很好的GUI構建器。 我想在一個名爲event.py的單獨文件中收集我在MyFrame.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 

,這是我的其他文件名爲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() 

這是名爲MyDialog.py文件。這是我想要顯示的對話框,如果我按下主框架中的按鈕。

# -*- 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,因爲這個工具更加靈活,並且符合我的需求,除了這個:-)。請幫助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

我沒有看到任何綁定()調用。請發佈完整的代碼。 – Igor

+0

我有兩個..但是我關注的一個是self.Bind(wx.EVT_BUTTON,self.pilihan_lainnya,self.button_6) –

+0

請發佈一個完整且可驗證的示例。不要放一段代碼。我們不關心你的代碼 - 我們希望幫助你解決問題,但是我們不能這麼做,因爲你拿走了一些重要的信息。 – Igor

回答

0

這段代碼:

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應該綁定到按鈕而不是框架。

+0

運行python event.py,主框架的GUI顯示,但是當我點擊「pilihan lainnya」時它仍然沒有從MyDialog.py文件中顯示對話框.. –

+0

是不工作..如何從event.py運行此應用程序,並可以使用此文件上的事件處理程序? –