Ich habe eine andere Frage zu diesem Thema gesehen, aber ich konnte die nicht ganz verstehen Informationen, die für mich arbeiten sollen, also dachte ich, ich würde meine Einzelheiten mitteilen - ich vermute, ich bin nur kurzsichtig.
Ich versuche, meine GUI über ein Testframework zu trainieren, bei dem ein Ereignis (in diesem Fall ein Tastendruck) in einem Testskript manuell aufgerufen wird. Bisher habe ich zusätzlich zu anderen irrelevanten Guffs:
# In GUI class:
self.button_1 = wx.Button(self, id=wx.ID_ANY, label="Button 1")
self.button_1.Bind(wx.EVT_BUTTON, self.button_1)
# In GUI Test class:
event = wx.PyCommandEvent(X, Y)
wx.PostEvent(get_gui_instance(), event)
Mein Problem ist, dass ich nicht weiß, was X
und Y
sein sollen (vorausgesetzt, der Rest ist in Ordnung). Jede Hilfe wird sehr geschätzt.
3 Antworten
Es stellt sich also heraus, dass ich meine GUI neu ausgerichtet habe, um sie in einem Arbeitsthread auszuführen von GUI Test Ich kann direkt damit kommunizieren. Ich hätte das früher erkennen sollen, aber das Ergebnis ist, dass ich mich nicht darum kümmern muss, Ereignisse vom GUI-Test auf der GUI zu veröffentlichen, da sie im selben Prozess ausgeführt werden.
Stattdessen kann ich jetzt die Effekte von Ereignissen direkt aufrufen. Zum Beispiel kann ich on_button_press()
aufrufen und dabei das tatsächliche Klicken auf die Schaltfläche umgehen, wodurch das Ereignis in wxPython normalerweise ausgelöst wird. Auf diese Weise kann ich Benutzerinteraktionen simulieren und Workflows und Eingabebereiche testen, genau das wollte ich tun.
Dies funktioniert natürlich nur, weil ich meine GUI im selben Prozess wie die Testsuite ausführe. Das Posten von Ereignissen scheint ansonsten der richtige Weg zu sein, und als Antwort auf meine eigene Frage scheinen benutzerdefinierte Ereignisse der Weg zu sein, um prozessübergreifende Tastendrücke aufzurufen. Dies impliziert die Verwendung einer Art "Testagent" innerhalb der GUI, um die für den Test spezifischen Ereignisse zu behandeln.
btnInfo = wx.Button(self,-1,"Some Button")
evt = wx.PyCommandEvent(wx.EVT_BUTTON.typeId,btnInfo.GetId())
wx.PostEvent(self, evt) #attach event to self ... alternatively maybe attach to btnInfo
Sollte arbeiten
import wx
class MessageDialog(wx.Dialog):
def __init__(self, message, title, tiempo = 2000):
style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER
super(MessageDialog, self).__init__(None, -1, title, style=style)
text = wx.StaticText(self, -1, message)
fuente = wx.Font(pointSize = 20,
family = wx.DEFAULT,
style = wx.NORMAL,
weight = wx.LIGHT,
underline=False,
faceName="",
encoding=wx.FONTENCODING_DEFAULT)
text.SetFont(fuente)
self.ok = wx.Button(self, wx.ID_OK, "OK")
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(text,0,wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL,5)
sizer.Add(self.ok, 0, wx.EXPAND|wx.ALL, 5)
self.SetSizerAndFit(sizer)
color = "WHEAT"
self.SetBackgroundColour(color)
self.Center()
self.Refresh()
wx.FutureCall(tiempo,self.salir_ok)
def salir_ok(self):
par_btn = getattr(self, "ok")
evt = wx.PyCommandEvent(wx.EVT_BUTTON.typeId, par_btn.GetId())
wx.PostEvent(self, evt)
return
if __name__ == '__main__':
app = wx.App()
dialog = MessageDialog( 'Teclee el nombre del proveedor', 'Proveedor')
dialog.ShowModal()
dialog.Destroy()
app.MainLoop()
Verwandte Fragen
Verknüpfte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.