2017-01-05 3 views
1

Ich habe versucht, ein Diagramm auf einer meiner Seiten auf gestapelte Widget in meiner GUI zu zeichnen. Ich habe einen Maler Klasse wie folgt:QPaintEvent deaktiviert QLineEdit beim Malen auf stackedWidget - PyQt

class Painter(QtGui.QWidget): 
    def __init__(self): 
     super(Painter, self).__init__() 

    def paintEvent(self, e): 
     qp = QtGui.QPainter(self) 
     self.draw_lines(qp) 

    def draw_lines(self, qp): 
     pen = QtGui.QPen(QtCore.Qt.blue, 2, QtCore.Qt.SolidLine) # draw graph 
     qp.setPen(pen) 
     qp.drawLine(80, 209, 150, 209) 
     qp.drawLine(150, 209, 220, 60) 
     qp.drawLine(430, 60, 500, 209) 
     qp.drawLine(500, 209, 570, 209) 
     qp.drawLine(220, 60, 430, 60) 

Dann habe ich eine Klasse mit einer der Seiten auf meiner gestapelt Widget, wo ich Painter Klasse aufrufen:

# create page 2 
self.page_2 = QtGui.QWidget() 
self.main_layout = QtGui.QGridLayout() 
self.page_2.setLayout(self.main_layout) 

# create group box 
self.group_box = QtGui.QGroupBox(self.page_2) 

# add plot diagram 
self.PaintPanel = diagram.Painter() 
self.PaintPanel.close() 
self.main_layout.addWidget(self.PaintPanel, 0, 0) 

# set text field 
self.text = QtGui.QLineEdit(self.group_box) 
self.text.setGeometry(QtCore.QRect(160, 330, 41, 21)) 

self.stackedWidget.addWidget(self.page_2) 

Mein Problem ist, dass die QLineEdit wird nicht aktiv (blockiert/eingefroren?), wenn ich das Painter-Klassen-Widget hinzufüge. Ohne dies funktioniert der QLineEdit gut. Ich frage mich, warum das so ist und wie das zu beheben ist? Jede Hilfe wird sehr geschätzt. Danke

Antwort

1

Sie Painter ist ein QWidget, und es sitzt auf Ihrem QLineEdit, damit der Maler alle Mausereignisse erhält. Wenn Sie über QLineEdit malen möchten, würde ich vorschlagen, QLineEdit abzuleiten und seine Malmethode zu überschreiben.

Ich dachte auch, Sie könnten Painter zu einem Event-Filter anstelle von QWidget machen und Ihre QLineEdit-Lackierereignisse abfangen, aber ich glaube, dass zuerst der Painter-Lack und dann der QLineEdit-Lack entstehen. Das ist wahrscheinlich nicht das, was du willst.

+0

Okay, ich verstehe es jetzt. Vielen Dank, ich verstehe, wo mein Fehler ist. Ich möchte, dass es wie folgt aussieht: ein Diagramm, das von der Painter-Klasse oben auf der Seite gemalt wurde (zum Beispiel auf einem QFrame oder ähnlichem) und ein QLineEdit unten auf der Seite, so dass mein Diagramm nicht darauf sitzt QLineEdit nicht mehr. Weißt du wie ich das archivieren kann? Jeder Tipp wird hilfreich sein, danke :) – nela

+0

Ich habe es jetzt herausgefunden. Vielen Dank für Ihre Hilfe @goug – nela

+0

Sie sind herzlich willkommen. Ich bin froh, dass es hilfreich war. – goug

Verwandte Themen