2013-08-04 44 views
1

我正在寫一個應用程序,我想在這個應用程序中進行演示。我正在尋找一些小部件,例如,教程如何使/繪製自己的小部件/視圖。我想對iphone短信應用程序有熟悉的眼光。PyQt短信氣泡小部件

問候。

+0

[自定義的Widget PyQt4的(http://zetcode.com/tutorials/pyqt4/customwidgets/) –

回答

1

此示例顯示如何在重載的QLabel中自定義繪畫。在paintEvent的畫家上設置一個不同的畫筆/畫筆以更改氣泡的顏色。

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_() 

然後你會得到類似於下面的內容。

enter image description here

+0

當你叫'paintEvent'? –

+0

@CheynShmuel。 'paintEvent'方法是一個事件處理程序。每當小部件需要重新繪製時,它都由Qt調用。 – ekhumoro