1

我正在编写一个应用程序,我想在其中进行表演对话。我正在寻找一些小部件,例如,教程如何制作/绘制自己的小部件/视图。我想对 iphone 短信应用程序有一个相似的外观。

问候。

4

1 回答 1

1

此示例显示如何在重载的 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_()

你最终会得到类似下面的东西。

在此处输入图像描述

于 2013-08-06T00:19:04.407 回答