Найти - Пользователи
Полная версия: PyQt создание нестандартного виджета
Начало » Python для экспертов » PyQt создание нестандартного виджета
1
marina932
Подскажите пожалуйста как можно создать нестандартный виджет.
Мне нужно создать в программе, что-то вроде своей области уведомлений (внути самой программы, на общей форме). Уведомления должны выглядеть в виде стопки с уведомлениями и чтобы у этого уведомления был крестик в правом верхнем углу, чтобы удалить это уведомление из родительского виджета. Как я понимаю нужно к label добавить какие-то нестандартные стили.
vic57
from PyQt4.Qt import *
a = QApplication([])
def on_click():
    row = l.currentIndex().row()
    item = l.takeItem(row)
    del item
    
l = QListWidget()
for i in xrange (10):
    item = QListWidgetItem(QIcon("icons/del.png"),"item" + str(i))
    l.addItem(item)
    
l.itemClicked.connect(on_click)
l.move(0,0)
l.show()
a.exec_()
                           


http://itnotesblog.ru/note.php?id=187
marina932
Спасибо за отклик, но это даже близко не похоже на то, что надо.
vic57
если system tray :
http://doc.crossplatform.ru/qt/en/4.7.x/desktop-systray.html
dima2881
vic57
Ну опять же, прям очевидно, что это прям в корне не то о чем говорю я.
vic57
выражайся яснее, код свой покажи
dima2881
Я не знаю куда яснее. Для однозначности своих целей я выложил картинку. Нужно примерно-тоже самое как на картинке.
vic57
dima2881
Я не знаю куда яснее. Для однозначности своих целей я выложил картинку. Нужно примерно-тоже самое как на картинке.
код в студию
alex925
from PyQt4 import QtGui, QtCore
 
 
class Notification(QtGui.QLabel):
    def __init__(self, *args, **kwargs):
        super(Notification, self).__init__(*args, **kwargs)
 
        self.button = QtGui.QToolButton(self)
        self.button.setIcon(QtGui.QIcon('cross.png'))
        self.button.setStyleSheet('border: 0px; padding: 0px;')
        self.button.setCursor(QtCore.Qt.ArrowCursor)
        self.button.clicked.connect(lambda: self.deleteLater())
 
        frame_width = self.style().pixelMetric(QtGui.QStyle.PM_DefaultFrameWidth)
        button_size = self.button.sizeHint()
 
        self.setStyleSheet("""padding-right: {0}px;
                            padding-left: 2px;
                            background-color: #bdbdbd;
                            border-width: 2px;
                            border-radius: 5px;
                            border-color: gray;
                            """.format(button_size.width() + frame_width + 1))
 
        self.setMinimumSize(
            max(self.minimumSizeHint().width(),
                button_size.width() + frame_width * 2 + 2),
            max(self.minimumSizeHint().height(),
                button_size.height() + frame_width * 2 + 2)
        )
 
    def resizeEvent(self, event):
        width = self.rect().right()
        height = self.rect().height()
 
        button_size = self.button.sizeHint()
        frame_width = self.style().pixelMetric(QtGui.QStyle.PM_DefaultFrameWidth)
        self.button.move(width - frame_width - button_size.width(),
                         height * 3 // 100)
        super(Notification, self).resizeEvent(event)
 
 
app = QtGui.QApplication([])
 
notif_list = []
window = QtGui.QWidget()
layout = QtGui.QVBoxLayout()
window.setLayout(layout)
 
for i in range(3):
    my_notif = Notification(text='\nУведомление {}\n'.format(i))
    layout.addWidget(my_notif)
    notif_list.append(my_notif)
 
layout.addStretch(0)
window.show()
app.exec()
Результат вот такой:
marina932
То, что было надо, спасибо)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB