我正在编写一个应用程序,我想在其中进行表演对话。我正在寻找一些小部件,例如,教程如何制作/绘制自己的小部件/视图。我想对 iphone 短信应用程序有一个相似的外观。
问候。
此示例显示如何在重载的 QLabel 中自定义绘制。在paintEvent 中的painter 上设置不同的笔/画笔来改变气泡的颜色。
from PyQt4 import QtCore, QtGui
class Bubble(QtGui.QLabel):
    def __init__(self,text):
        super(Bubble,self).__init__(text)
        self.setContentsMargins(5,5,5,5)
    def paintEvent(self, e):
        p = QtGui.QPainter(self)
        p.setRenderHint(QtGui.QPainter.Antialiasing,True)
        p.drawRoundedRect(0,0,self.width()-1,self.height()-1,5,5)
        super(Bubble,self).paintEvent(e)        
class MyWidget(QtGui.QWidget):
    def __init__(self,text,left=True):
        super(MyWidget,self).__init__()
        hbox = QtGui.QHBoxLayout()
        label = Bubble(text)
        if not left:
            hbox.addSpacerItem(QtGui.QSpacerItem(1,1,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Preferred))
        hbox.addWidget(label)
        if left:
            hbox.addSpacerItem(QtGui.QSpacerItem(1,1,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Preferred))            
        hbox.setContentsMargins(0,0,0,0)
        self.setLayout(hbox)
        self.setContentsMargins(0,0,0,0)
if __name__ == '__main__':
    a = QtGui.QApplication([])
    w = QtGui.QWidget()
    vbox = QtGui.QVBoxLayout()
    vbox.addWidget(MyWidget("Left side"))
    vbox.addWidget(MyWidget("Right side",left=False))
    vbox.addWidget(MyWidget("Left side"))
    vbox.addWidget(MyWidget("Left side"))
    w.setLayout(vbox)
    w.show()
    a.exec_()
你最终会得到类似下面的东西。
