Форум сайта python.su
Подскажите пожалуйста как можно создать нестандартный виджет.
Мне нужно создать в программе, что-то вроде своей области уведомлений (внути самой программы, на общей форме). Уведомления должны выглядеть в виде стопки с уведомлениями и чтобы у этого уведомления был крестик в правом верхнем углу, чтобы удалить это уведомление из родительского виджета. Как я понимаю нужно к label добавить какие-то нестандартные стили.
Офлайн
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_()
Отредактировано vic57 (Март 20, 2016 08:56:41)
Офлайн
Спасибо за отклик, но это даже близко не похоже на то, что надо.
Офлайн
если system tray :
http://doc.crossplatform.ru/qt/en/4.7.x/desktop-systray.html
Офлайн
vic57
Ну опять же, прям очевидно, что это прям в корне не то о чем говорю я.
Офлайн
выражайся яснее, код свой покажи
Офлайн
Я не знаю куда яснее. Для однозначности своих целей я выложил картинку. Нужно примерно-тоже самое как на картинке.
Офлайн
dima2881код в студию
Я не знаю куда яснее. Для однозначности своих целей я выложил картинку. Нужно примерно-тоже самое как на картинке.
Офлайн
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()
Отредактировано alex925 (Март 21, 2016 13:32:48)
Прикреплённый файлы: Снимок экрана 2016-03-21 в 14.38.23.png (27,3 KБ)
Офлайн
То, что было надо, спасибо)
Офлайн