Как изменить sizeHint после отображения виджетов в актуальном? - PullRequest
0 голосов
/ 04 мая 2019

Я сделал widgetAction.

Я установил sizeHint (100, 30) как настройку по умолчанию.

Я установил widgetAction в меню QPushButton()

QPushButton выравнивается по QVBoxLayout()

Итак, размер QPushButton часто изменяется путем растяжения ... изменения размера ... минимизации ... и так далее.

Но метки widgetAction не изменены.

Есть ли способ изменить размер sizeHint() после его показа?

Я хочу изменить размер ярлыка widgetAction до того же размера QPushButton

the menu of widgetAction is not the same size of the menu button

from PySide import QtGui
from PySide import QtCore
import sys
class Window(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        self.menubar = QtGui.QMenuBar()
        self.a_menu = QtGui.QMenu("a-menu")  
        self.label_A = UnderlineStyleLabel(self.a_menu,QtGui.QTextCharFormat.WaveUnderline)        
        self.widgetAction = QtGui.QWidgetAction(self.a_menu)
        self.widgetAction.createWidget(self.label_A)
        self.widgetAction.setDefaultWidget(self.label_A)
        self.a_menu.addAction(self.widgetAction)        
        self.menubar.addMenu(self.a_menu)
        self.setMenuBar(self.menubar)
        self.show()   
class UnderlineStyleLabel(QtGui.QWidget):
    def __init__(self,parent=None,underlineStyle=QtGui.QTextCharFormat.NoUnderline):
        super(UnderlineStyleLabel, self).__init__(parent=None)
        self.setParent(parent)
        self.pen_linepath = QtGui.QPainterPath(QtCore.QPointF(0, 0))        
        self.pen_linepath.lineTo(100, 0)
        self.underlineStyle = underlineStyle
        self.initial_size = QtCore.QSize(100, 30)
    def sizeHint(self):
        return self.initial_size
    def mousePressEvent(self, event):
        self.initial_size = QtCore.QSize(200,30)
        print("mousePressEvent pressed! please change the size!")
    def paintEvent(self,event):
        pen = QtGui.QPen()
        if self.underlineStyle == QtGui.QTextCharFormat.WaveUnderline:
            pen = QtGui.QPen()
            pen.setStyle(QtCore.Qt.PenStyle.SolidLine)
            pen.setWidth(10)
            pen.setColor(QtCore.Qt.black)
            painter = QtGui.QPainter()
            if not painter.isActive():
                painter.begin(self)
            painter.setPen(pen)
            painter.setRenderHint(QtGui.QPainter.RenderHint.Antialiasing)
            painter.drawArc(10, 10, 10, 10, 480, 1920)
            painter.drawArc(20, 7, 10, 10, -480, -1920)
            painter.drawArc(30, 10, 10, 10, 480, 1920)
            painter.drawArc(40, 7, 10, 10, -480, -1920)
            painter.drawArc(50, 10, 10, 10, 480, 1920)
            painter.drawArc(60, 7, 10, 10, -480, -1920)
            painter.end()
        return QtGui.QWidget.paintEvent(self,event)
def main():

    try:
        QtGui.QApplication([])
    except Exception as e:
        print(18,e)
    w = Window()
    sys.exit(QtGui.QApplication.exec_())
if __name__ == "__main__":
    main()

1 Ответ

1 голос
/ 20 мая 2019

Ваше действие встроено в QWidgetAction.Итак, вам также необходимо изменить размер родительского виджета вашего self.label_A.

Если вы добавите строку self.parent().resize(self.initial_size) в конце UnderlineStyleLabel.mousePressEvent, размер метки будет изменен.

...