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()
Bind() 호출이 표시되지 않습니다. 전체 코드를 게시하십시오. – Igor
나는 두 가지를 가졌지 만 초점을 맞춘 것은 self.Bind (wx.EVT_BUTTON, self.pilihan_lainnya, self.button_6) –
예제를 게시하십시오. 코드 조각을 넣지 마십시오. 우리는 당신에 대해 신경 쓰지 않습니다. 우리는 당신이 문제를 해결할 수 있도록 돕고 싶지만, 중요한 정보를 가지고 있기 때문에 그렇게 할 수는 없습니다. – Igor