我使用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()
我沒有看到任何綁定()調用。請發佈完整的代碼。 – Igor
我有兩個..但是我關注的一個是self.Bind(wx.EVT_BUTTON,self.pilihan_lainnya,self.button_6) –
請發佈一個完整且可驗證的示例。不要放一段代碼。我們不關心你的代碼 - 我們希望幫助你解決問題,但是我們不能這麼做,因爲你拿走了一些重要的信息。 – Igor