2013-08-04 2 views
1

Я пишу приложение, в котором я хочу, чтобы показать разговор. Я ищу некоторый виджет, например, учебник, как сделать/нарисовать собственный виджет/представление. Я хочу иметь знакомый вид приложения iphone sms.PyQt sms пузырь виджет

Приветствия.

+0

[Выборочная PyQt4 Widget] (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

Смежные вопросы