我做了一个widgetAction
。你知道吗
我将sizeHint (100, 30)
设置为默认设置。你知道吗
我将widgetAction
设置为QPushButton()
的菜单
QPushButton由QVBoxLayout()
对齐
所以,QPushButton
的大小经常通过拉伸改变。。。正在调整大小。。。最小化。。。等等。你知道吗
但是widgetAction的标签没有改变。你知道吗
有没有办法在显示后更改sizeHint()
的大小?你知道吗
我想将widgetAction
的标签调整为QPushButton
的大小
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()
您的操作嵌入在
QWidgetAction
中。因此,还需要调整self.label_A
的父小部件的大小。你知道吗如果在
UnderlineStyleLabel.mousePressEvent
的末尾添加self.parent().resize(self.initial_size)
行,标签的大小将调整得很好。你知道吗相关问题 更多 >
编程相关推荐