Hallo!
Ich habe eine wx.ListCtrl() mit
zwei zugewisenen Events. Einmal
wx.EVT_LIST_KEY_DOWN und des weiteren wx.EVT_COMMAND_RIGHT_CLICK.
Im letzten Event wird ein Popupmenü angezeigt.
Nun möchte ich, dass dieses Popupmenü auch angezeigt wird, wenn die Windows-Menütaste (keycode 399) gedrückt wird.
Dies kann ich im Event wx.EVT_LIST_KEY_DOWN leicht feststellen.
Wie kann ich aus dem Event wx.EVT_LIST_KEY_DOWN das Event wx.EVT_COMMAND_RIGHT_CLICK auslösen, um die zugehörige Methode korrekt aufzurufen?
Danke für die hoffentlich erfolgende Hilfe an Alle!
Gruß
JR
Event-Handling
Du hast ja sicher das Demo installiert, dort kannst du ja das listctrl demoJR hat geschrieben:Merkwürdig, ist mir nicht aufgefallen, doch weißt du, wie ich das o.g. hinbekommen könnte?
anschauen.
Code: Alles auswählen
self.list.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
# for wxMSW
self.list.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightClick)
#oder OnRightDown
# for wxGTK
self.list.Bind(wx.EVT_RIGHT_UP, self.OnRightClick)
Hi Francesco!
Leider hast du meine Frage glaube ich nicht richtig verstanden:
JR
Leider hast du meine Frage glaube ich nicht richtig verstanden:
GrußWie kann ich aus dem Event wx.EVT_LIST_KEY_DOWN das Event wx.EVT_COMMAND_RIGHT_CLICK auslösen, um die zugehörige Methode korrekt aufzurufen?
JR
Sorry, ich probiers nochmals.JR hat geschrieben:Hi Francesco!
Leider hast du meine Frage glaube ich nicht richtig verstanden:
GrußWie kann ich aus dem Event wx.EVT_LIST_KEY_DOWN das Event wx.EVT_COMMAND_RIGHT_CLICK auslösen, um die zugehörige Methode korrekt aufzurufen?
JR

also es genügt eigentlich, wenn du aus der Methode, die von
wx.EVT_LIST_KEY_DOWN aufgerufen wird, die Methode aufrufst, die zum wx.EVT_COMMAND_RIGHT_CLICK gebunden ist?
Oder ist es nötig, ein neues Event zu generieren (von wx.EVT_LIST_KEY_DOWN aus)?
Hi!
Also ich müsste in der Methode, die durch wx.EVT_LIST_KEY_DOWN ausgelöst wird, ein Event (wx.EVT_COMMAND_RIGHT_CLICK) generieren.
Denn die Methode, welche zum Event wx.EVT_COMMAND_RIGHT_CLICK gehört, benötigt den Parameter event über welchen ich mehrere wichtige Informationen erhalten kann.
Die Methode beginnt so:
Hoffe, du hast eine Idee. Letztlich möchte ich in Worten prozedural das Event wx.EVT_COMMAND_RIGHT_CLICK meiner wx.ListCtrl auslösen.
Grüße
JR
Also ich müsste in der Methode, die durch wx.EVT_LIST_KEY_DOWN ausgelöst wird, ein Event (wx.EVT_COMMAND_RIGHT_CLICK) generieren.
Denn die Methode, welche zum Event wx.EVT_COMMAND_RIGHT_CLICK gehört, benötigt den Parameter event über welchen ich mehrere wichtige Informationen erhalten kann.
Die Methode beginnt so:
Code: Alles auswählen
def EvtMouseRightClick(self, event):
Grüße
JR
Leider muss ich hier auch passen.
Du muesstes ein Event generieren und dann weiterschicken.
Ich weiss aber nicht, ob das funktioniert.
So auf die Art:
Du muesstes ein Event generieren und dann weiterschicken.
Ich weiss aber nicht, ob das funktioniert.
So auf die Art:
Code: Alles auswählen
def PostComboBoxSelectedEvent(self, text):
event = wx.CommandEvent(wx.wxEVT_COMMAND_COMBOBOX_SELECTED,
self.GetId()) #das entsprechende dann generieren
event.SetString(text) #und andere Parameter setzen
self.GetEventHandler().ProcessEvent(event) #event verschicken
Hi!
In der Zeile
kommt folgende Fehlermeldung:
Ansonsten gefällt mir das erstmal. Weiß nur nicht, wie man das Objekt wx.CommandEvent instanziert. In der wx.Python-Referenz steht:
wxCommandEvent::wxCommandEvent
wxCommandEvent(WXTYPE commandEventType = 0, int id = 0)
Constructor.
Muss wohl ewig rumprobieren.
So etwas braucht man doch ständig, wenn man seine Objekte auch prozedural etwas machen lassen möchte.
Grüße
JR
In der Zeile
Code: Alles auswählen
eventNew = wx.CommandEvent(wx.EVT_COMMAND_RIGHT_CLICK, self.GetId())
Code: Alles auswählen
newobj = _core_.new_CommandEvent(*args, **kwargs)
TypeError: argument number 1: a 'number' is expected, 'PyEventBinder(<wx._core.PyEventBinder object at 0x00B15B30>)' is received
wxCommandEvent::wxCommandEvent
wxCommandEvent(WXTYPE commandEventType = 0, int id = 0)
Constructor.
Muss wohl ewig rumprobieren.
So etwas braucht man doch ständig, wenn man seine Objekte auch prozedural etwas machen lassen möchte.
Grüße
JR
Hi, das sollte heissen:JR hat geschrieben:Hi!
In der ZeileCode: Alles auswählen
eventNew = wx.CommandEvent(wx.EVT_COMMAND_RIGHT_CLICK, self.GetId())
Code: Alles auswählen
eventNew = wx.CommandEvent(wx.wxEVT_COMMAND_RIGHT_CLICK, self.GetId())
Hey Francesco!
Es funzt
Ist eine wertvolle und letztlich wie immer kurze Geschichte.
Dank dir!
Viel Spaß noch und beste Grüße
JR
P.S.: Arbeitest du zufällig auch mit Plone? Hab hier schon häufig eine Frage gestellt, auf die keiner richtig reagieren möchte...
Es funzt

Ist eine wertvolle und letztlich wie immer kurze Geschichte.
Dank dir!
Viel Spaß noch und beste Grüße
JR
P.S.: Arbeitest du zufällig auch mit Plone? Hab hier schon häufig eine Frage gestellt, auf die keiner richtig reagieren möchte...
Toll, das freut mich!JR hat geschrieben:Hey Francesco!
Es funzt
Ist eine wertvolle und letztlich wie immer kurze Geschichte.
Dank dir!
Viel Spaß noch und beste Grüße
JR
P.S.: Arbeitest du zufällig auch mit Plone? Hab hier schon häufig eine Frage gestellt, auf die keiner richtig reagieren möchte...

Nein, Plone ist leider ein Fremdwort für mich!

Hi Francesco und alle Anderen!
Wer weiß, warum die zweite print-Zeile in folgendem Code nicht geht, bzw. was mache ich falsch?
Ich brauche eine Event-Id, um ein Event manuell auszulösen:
Auslösen möchte ich das Event so ähnlich wie:
obiges geht, folgendes geht halt nicht:
Weiß jemand einen Rat?
Grüße und schönen Abend noch!
JR
Wer weiß, warum die zweite print-Zeile in folgendem Code nicht geht, bzw. was mache ich falsch?
Ich brauche eine Event-Id, um ein Event manuell auszulösen:
Code: Alles auswählen
import wx
print wx.wxEVT_COMMAND_RIGHT_CLICK
print wx.wxEVT_LIST_ITEM_SELECTED
Code: Alles auswählen
eventNew = wx.CommandEvent(wx.wxEVT_COMMAND_RIGHT_CLICK, self.GetId())
eventNew.SetClientObject(self)
self.GetEventHandler().ProcessEvent(eventNew)
Code: Alles auswählen
eventNew = wx.CommandEvent(wx.wxEVT_LIST_ITEM_SELECTED, self.GetId())
eventNew.SetClientObject(self)
self.GetEventHandler().ProcessEvent(eventNew)
Grüße und schönen Abend noch!
JR
Hallo JR,JR hat geschrieben:Hi Francesco und alle Anderen!
Wer weiß, warum die zweite print-Zeile in folgendem Code nicht geht, bzw. was mache ich falsch?
Ich brauche eine Event-Id, um ein Event manuell auszulösen:Code: Alles auswählen
import wx print wx.wxEVT_COMMAND_RIGHT_CLICK print wx.wxEVT_LIST_ITEM_SELECTED
aus dem Stegreif weiss ich das auch nie.
Ich machte nur ein Filesearch und kam auf diese Konstante:
wx.wxEVT_COMMAND_LIST_ITEM_SELECTED
Wenn Du dich mehr mit wxPython beschäftigen willst, würde ich die Mailing List kontaktieren. Über gmane ist sie als NNTP zu beziehen, ist viel
angenehmer als als Mailing list.