良い、wxPythonのボタンのクリックで新しいウィンドウで開く、夜/朝、新しいウィンドウにパラメータを渡す
私は現在のボタンの多くのGUIを作成し、いくつかの(9)ボタンで新しいウィンドウを開いています。このウィンドウはセットアップの9つのケースすべてで同じですが、ユーザーが継続するときにこのウィンドウがどのように変化するかは、どのボタンがクリックされたかに基づいています。だから、9つのボタンすべてを扱い、新しいウィンドウを作成するが、新しいウィンドウにパラメータを渡すボタンハンドラを作りたい。
# Handles the creation of all of the buttons
def make_button(text, callback, starty, startx, height, width):
button = wx.Button(self, -1, text)
sizer.Add(button, (starty, startx), (height, width), wx.EXPAND)
button.Bind(wx.EVT_BUTTON, callback)
return button
make_button("Configure", lambda event: self.RailConfig_clicked(event, 1, 1), 10, 1, 1 ,1)
make_button("Configure", lambda event: self.RailConfig_clicked(event, 1, 2), 10, 2, 1 ,1)
make_button("Configure", lambda event: self.RailConfig_clicked(event, 1, 3), 10, 3, 1 ,1)
make_button("Configure", lambda event: self.RailConfig_clicked(event, 2, 1), 10, 6, 1 ,1)
make_button("Configure", lambda event: self.RailConfig_clicked(event, 2, 2), 10, 7, 1 ,1)
make_button("Configure", lambda event: self.RailConfig_clicked(event, 2, 3), 10, 8, 1 ,1)
make_button("Configure", lambda event: self.RailConfig_clicked(event, 3, 1), 10, 11, 1 ,1)
make_button("Configure", lambda event: self.RailConfig_clicked(event, 3, 2), 10, 12, 1 ,1)
make_button("Configure", lambda event: self.RailConfig_clicked(event, 3, 3), 10, 13, 1 ,1)
make_button("Configure", lambda event: self.RailConfig_clicked(event, 4, 1), 10, 16, 1 ,1)
make_button("Configure", lambda event: self.RailConfig_clicked(event, 4, 2), 10, 17, 1 ,1)
make_button("Configure", lambda event: self.RailConfig_clicked(event, 4, 3), 10, 18, 1 ,1)
def RailConfig_clicked(self, event, slot, rail):
self.Rail1ConfigSlot1_window = NewWindow(parent=None, id= -1)
self.Rail1ConfigSlot1_window.Show()
print slot
print rail
class NewWindow(wx.Frame):
def __init__(self,parent,id):
wx.Frame.__init__(self, parent, id, 'New Window')
wx.Frame.CenterOnScreen(self)
self.initialize()
def initialize(self):
sizer = wx.GridBagSizer()
self.VoltageLabel = wx.StaticText(self, -1, 'Margin High Voltage', wx.DefaultPosition, wx.DefaultSize)
sizer.Add(self.VoltageLabel, (0,0), (1,1))
self.VoltageLabel2 = wx.StaticText(self, -1, 'Margin Low Voltage', wx.DefaultPosition, wx.DefaultSize)
sizer.Add(self.VoltageLabel2, (3,0), (1,1))
self.VoltageLabel3 = wx.StaticText(self, -1, 'Current Voltage Low Value', wx.DefaultPosition, wx.DefaultSize)
sizer.Add(self.VoltageLabel3, (0,2), (1,1))
self.VoltageLabel4 = wx.StaticText(self, -1, 'Current Voltage High Value', wx.DefaultPosition, wx.DefaultSize)
sizer.Add(self.VoltageLabel4, (3,2), (1,1))
self.SetSizerAndFit(sizer)
self.SetSizeHints(-1,-1)
self.SetAutoLayout(True)
self.Show(True)
for col in range(0,5):
sizer.AddGrowableCol(col)
self.editlow = wx.TextCtrl(self, -1, "", wx.DefaultPosition, wx.DefaultSize)
sizer.Add(self.editlow, (1,0), (1,1), wx.EXPAND)
self.submitlow = wx.Button(self, label="Submit")
sizer.Add(self.submitlow, (5, 5), (1, 1), wx.EXPAND)
だから、あなたは私がラムダイベントの呼び出しを使用することにより、デフRailConfig_clickedにスロットとレールの2つのパラメータを渡すことがわかります。だから、ここに私のコードです。 RailConfig_clickedの中で新しいウィンドウを作成しますが、後で何を変更するかを決定するために情報を使用できるように、これらの変数を新しいウィンドウに再度渡したいと思います。
私はそうのようなメソッドによりNewWindowにパラメータを入れて試してみた:
self.Rail1ConfigSlot1_window = NewWindow(parent=None, id= -1, slot, rail)
が、私は得る:
SyntaxError: non-keyword arg after keyword arg
あなたのソースコード全体を投稿できますか? 'self.Rail1ConfigSlot1_window = NewWindow(parent = None、id = -1、slot、rail)'では、4つのパラメータを渡しましたが、NewWindowクラスは2つのパラメータ(parentとid)を必要とするだけなので、SyntaxErorを取得しました。 – Quinn