在实际显示小部件后如何更改sizeHint?

2024-10-01 05:04:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我做了一个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()

Tags: selfsizeinitdefparentmenupainterqtgui
1条回答
网友
1楼 · 发布于 2024-10-01 05:04:08

您的操作嵌入在QWidgetAction中。因此,还需要调整self.label_A的父小部件的大小。你知道吗

如果在UnderlineStyleLabel.mousePressEvent的末尾添加self.parent().resize(self.initial_size)行,标签的大小将调整得很好。你知道吗

相关问题 更多 >