2017-01-05 3 views
1

Я пытался нарисовать диаграмму на одной из моих страниц на стеке в моем графическом интерфейсе. У меня есть класс художника, как это:QPaintEvent отключает QLineEdit при рисовании на 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) 

Тогда у меня есть класс с одной из страниц на моем сложенных виджете, где я называю Painter класс:

# 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) 

Моя проблема заключается в том, что QLineEdit становится неактивен (заблокирован/заморожен?), когда я добавляю виджет класса Painter. Без этого QLineEdit отлично работает. Интересно, почему это и как это исправить? Любая помощь будет высоко ценится. Спасибо

ответ

1

You Painter - это QWidget, и он сидит поверх вашего QLineEdit, поэтому Painter получает все события мыши. Если вы хотите нарисовать поверх QLineEdit, я бы предложил подкласс QLineEdit и переопределить его метод рисования.

Я также думал, что вы можете сделать Painter фильтром событий вместо QWidget и перехватить события рисования QLineEdit, но я считаю, что сначала будет Paint Painter, а затем QLineEdit. Это, вероятно, не то, что вы хотите.

+0

Хорошо, я понял. Большое вам спасибо, я понимаю, где моя ошибка. Поэтому я хочу, чтобы это было похоже: диаграмма, написанная классом Painter поверх страницы (например, нарисованная на QFrame или что-то в этом роде) и QLineEdit в нижней части страницы, чтобы моя диаграмма не сидела на QLineEdit больше. Знаете ли вы, как я могу архивировать это? Любой подсказку будет полезно спасибо :) – nela

+0

Я понял это сейчас. Благодарим за помощь @goug – nela

+0

Добро пожаловать. Рад, что это было полезно. – goug