Seite 1 von 1

GetPosition ungenau?

Verfasst: Sonntag 30. Juli 2006, 11:58
von DatenMetzgerX

Code: Alles auswählen

    def MakeMenu(self):
        self.PopUpMenu = wx.Menu()
        self.new = self.PopUpMenu.Append(-1, 'Neu', 'Fügt zur Tabelle eine Neue Zeile hinzu')
        self.edit =self.PopUpMenu.Append(-1, 'Löschen', 'Löschen sie die Selektionierte Zeile')

        self.Bind(wx.grid.EVT_GRID_CELL_RIGHT_CLICK, self.OnShowPopup)

    def OnShowPopup(self, event):
        """Popup Menü anzeigen"""
        pos = event.GetPosition()
        pos = self.ScreenToClient(pos)
        self.PopupMenu(self.PopUpMenu, pos)
Dann zeichnet er mir das Menü ganz an einem falschen ort :roll:

Bild

Re: GetPosition ungenau?

Verfasst: Sonntag 30. Juli 2006, 12:27
von gerold
DatenMetzgerX hat geschrieben:Dann zeichnet er mir das Menü ganz an einem falschen ort
Hi DMX!

So wie es aussieht, gibt das Event "EVT_GRID_CELL_RIGHT_CLICK" schon die korrekte Position zurück. Du musst sie nicht mehr mit "ScreenToClient" umwandeln.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import wx
import wx.grid


class MyFrame(wx.Frame):

    def __init__(self, parent = None, id = -1, title = "Popuptest"):
        wx.Frame.__init__(self, parent, id, title, size = (600, 400))
        
        self.grid = wx.grid.Grid(self)
        self.grid.CreateGrid(50, 50)
        
        self.popup_menu = wx.Menu()
        self.mnu_p_new = self.popup_menu.Append(
            -1, u'Neu', u'Fügt zur Tabelle eine Neue Zeile hinzu'
        )
        self.mnu_p_edit = self.popup_menu.Append(
            -1, u'Löschen', u'Löschen sie die Selektionierte Zeile'
        )
        
        self.grid.Bind(wx.grid.EVT_GRID_CELL_RIGHT_CLICK, self.show_popup_menu)
    
    
    def show_popup_menu(self, event):
        pos = event.GetPosition()
        self.PopupMenu(self.popup_menu, pos)


def main():
    app = wx.PySimpleApp()
    f = MyFrame()
    f.Center()
    f.Show()
    app.MainLoop()


if __name__ == "__main__":
    main()
lg
Gerold
:-)

Verfasst: Mittwoch 7. November 2007, 10:58
von tomate
Kann mir jemand erklären, was diese Zeile macht:

Code: Alles auswählen

 self.PopupMenu(self.popup_menu, pos)
Was ist self.PopupMenu?

Verfasst: Mittwoch 7. November 2007, 11:47
von gerold
tomate hat geschrieben:Kann mir jemand erklären, was diese Zeile macht:

Code: Alles auswählen

self.PopupMenu(self.popup_menu, pos)
Was ist self.PopupMenu?
Hallo tomate!

Aber jetzt mal im Ernst! Warum probierst du das Beispiel nicht aus?

``self`` ist in der Klasse ``MyFrame`` die Klasseninstanz selber. Diese wurde von ``wx.Frame`` abgeleitet.

Und wenn im Quellcode ``PopupMenu()`` nicht überschrieben wird, dann ist damit ``wx.Frame.PopupMenu`` gemeint. Und das findest du in der Hilfe.

Wenn du hier http://wxwidgets.org/manuals/stable/wx_classref.html nach "wxFrame" suchst, dann wirst du die Seite zu "wxFrame" finden. Achte aber darauf, dass in der wxWidgets-Hilfe kein Punkt zwischen "wx" und "Frame" steht. Suche dort nach "PopupMenu". Wenn du dort "PopupMenu" nicht findest, dann musst du in den Objekten suchen, die auf dieser Seite unter "Derived from" stehen. Also in "wxTopLevelWindow", in "wxWindow", in "wxEvtHandler" oder in "wxObject".

Finden wirst du es in "wxWindow" --> http://wxwidgets.org/manuals/stable/wx_wxwindow.html

http://wxwidgets.org/manuals/stable/wx_ ... wpopupmenu

Noch leichter findest du eine Erklärung, wenn du in der, bei der Installation von wxPython unter Windows, installierten wxWidgets-Hilfedatei nach PopupMenu suchst.

Du kannst aber auch Debuggen. Also einfach das Programm in WingIDE ausführen lassen und dort in der Zeile 29 einen Haltepunkt setzen. Dann kannst du mit help(self.PopupMenu) Hilfe dazu anfordern. Du kannst aber auch mit der rechten Maustaste darauf klicken und mit dem Menüpunkt "Gehe zur Definition", direkt dorthin springen. Dann wärst du direkt bei der Funktion und würdest das hier sehen:

Code: Alles auswählen

    def PopupMenu(*args, **kwargs):
        """
        PopupMenu(self, Menu menu, Point pos=DefaultPosition) -> bool

        Pops up the given menu at the specified coordinates, relative to this window,
        and returns control when the user has dismissed the menu. If a menu item is
        selected, the corresponding menu event is generated and will be processed as
        usual.  If the default position is given then the current position of the
        mouse cursor will be used.
        """
        return _core_.Window_PopupMenu(*args, **kwargs)
Ich glaube das wars. ;-)

mfg
Gerold
:-)