Guten Abend/Morgen,wxpython öffnen neue Fenster mit Schaltfläche klicken, übergeben Parameter zu neuen Fenster
Ich bin derzeit eine GUI mit vielen Tasten machen, und einige (9) der Tasten ein neues Fenster öffnen. Dieses Fenster ist in allen 9 Fällen in Setup identisch, aber was dieses Fenster ändert, wenn der Benutzer fortfährt, hängt davon ab, auf welche der Schaltflächen geklickt wurde. Ich möchte also einen Button-Handler erstellen, der alle 9 Buttons behandelt und ein neues Fenster erstellt, aber Parameter an das neue Fenster übergibt. So, hier ist mein Code:
# 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)
So können Sie sehen, dass ich passieren zwei Parameter an die RailConfig_clicked def, Schlitz und Schiene, durch die Lambda-Ereignis-Aufruf. In RailConfig_clicked erstelle ich ein neues Fenster, aber ich möchte diese Variablen noch einmal an das neue Fenster übergeben, damit ich anhand der Informationen entscheiden kann, was ich später ändern möchte.
Ich habe versucht, wie so die Parameter in NewWindow setzen:
self.Rail1ConfigSlot1_window = NewWindow(parent=None, id= -1, slot, rail)
aber ich bekomme:
SyntaxError: non-keyword arg after keyword arg
Können Sie bitte Ihren gesamten Quellcode veröffentlichen? In 'self.Rail1ConfigSlot1_window = NewWindow (parent = None, ID = -1, slot, rail)' haben Sie vier Parameter übergeben, aber die NewWindow-Klasse benötigt nur zwei Parameter (parent und id), also haben Sie den SyntaxEror erhalten. – Quinn