Topic: [RISOLTO]PaintDC  (Letto 95 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline beppesgro

  • python unicellularis
  • *
  • Post: 3
  • Punti reputazione: 0
    • Mostra profilo
[RISOLTO]PaintDC
« il: Novembre 25, 2021, 07:29 »
Buongiorno a tutti,
scrivo perchè ho un problema di questo tipo.Ho creato un Frame in cui nella sua init dichiaro un wx.EVT_PAINT per disegnare un rettangolo in prossimità del suo angolo alto- destro ed una wx.grid popolata da un db sqllite. Fin qui tutto bene ma poi mi nasce il problema. Avrei bisogno che al click su una cella della wx.Grid creata il testo di quella cella venga scritto all'interno del rettangolo. Sull Evento EVT_GRID_CELL_LEFT_CLICK leggo il valore da passare poi scrivo dc.Drawtext(.....) e chiamo il  .Refresh() del frame ma non cambia nulla. Mi sapreste dire dove sto sbagliando(perche sicuramente o fatto qualche cavolata) o eventalmente se esistono metodi migliori per fare questa operazione ed eventualmente qualche link per andare a prendere info e spunti.
Grazie a tutti 
« Ultima modifica: Novembre 25, 2021, 10:58 da beppesgro »

Offline nuzzopippo

  • python sapiens
  • *****
  • Post: 501
  • Punti reputazione: 0
    • Mostra profilo
Re:PaintDC
« Risposta #1 il: Novembre 25, 2021, 08:29 »
Spunti potresti trovarli nella demo di Phoenix che presenta anche esempi per il rendering di immagini e moltissimo altro.

Per il "perché non funziona", dipenderà certo da ciò che fai, il punto è che per rispondere bisognerebbe saperlo, prova ad inserire un esempio minimale che riproduce il Tuo problema che si vede un po.

Offline beppesgro

  • python unicellularis
  • *
  • Post: 3
  • Punti reputazione: 0
    • Mostra profilo
Re:PaintDC
« Risposta #2 il: Novembre 25, 2021, 08:40 »
Ciao, vado a dare un occhiata alla demo di Phoenix nella speranza di avere un illuminazione  :). intanto sotto il codice che uso:
#Code
def __init__(self):
....
self.Bind(wx.EVT_PAINT, self.OnPaint)
-----------------------------------------------
def table1(self):
self.table_1.CreateGrid(1, 7)
....
self.table_1.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.ontable1clicked)
------------------------------------------------
 def OnPaint(self, event):
        self.dc = wx.PaintDC(self)
        self.penna = wx.Pen("yellow", 5, wx.SOLID)
        self.dc.SetPen(self.penna)
        self.dc.SetBrush(wx.YELLOW_BRUSH)
        self.dc.DrawRectangle(400, 55, 1000, 30)
------------------------------------------------
def ontable1clicked(self, event):
        self.dc.DrawText("Hello", 420, 55)
        self.Refresh()

Grazie per l'aiuto.

Offline beppesgro

  • python unicellularis
  • *
  • Post: 3
  • Punti reputazione: 0
    • Mostra profilo
[RISOLTO]PaintDC
« Risposta #3 il: Novembre 25, 2021, 10:57 »
Ciao ho risolto  :)
Con un po di prove e tanta fortuna sono riuscito a venirne a capo. Se servisse a qualcuno ho modificato cosi il codice:
#CODE

self.dc = wx.PaintDC(self)
        self.penna = wx.Pen("yellow", 5, wx.SOLID)
        self.dc.SetPen(self.penna)
        self.dc.SetBrush(wx.YELLOW_BRUSH)
        self.dc.DrawRectangle(430, 75, 1000, 20)
        self.dc.DrawText(self.txt, self.pos1, 80)
        del self.dc
--------------------------------------------------
def ontable1clicked(self, event):       
        self.txt = Valore letto dalla cella
        self.posx = posizione x dove voglio che sia visualizato
        self.OnPaint
        self.Refresh()

in pratica il drawtext lo inserito nell evento Paint con stringa nulla e poi richiamo la funzione Onpaint nell evento tabella scrivendo prima il valore di testo che drawtext scriverà.

Sono felice di aver risolto.
Grazie. :fingers-crossed:

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.201
  • Punti reputazione: 9
    • Mostra profilo
Re:[RISOLTO]PaintDC
« Risposta #4 il: Novembre 27, 2021, 19:46 »
cioè, non è che tu non possa fare così... ma non basterebbe usare una banale casella di testo, per scriverci dentro? O addirittura un wx.StaticText che vai a modificare ogni volta? Non che non mi piaccia complicarmi la vita, beninteso, ma... la vedo un po' troppo ingegnosa come soluzione...