Уведомления

Группа в Telegram: @pythonsu

#1 Март 19, 2016 23:06:20

marina932
Зарегистрирован: 2016-02-22
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt создание нестандартного виджета

Подскажите пожалуйста как можно создать нестандартный виджет.
Мне нужно создать в программе, что-то вроде своей области уведомлений (внути самой программы, на общей форме). Уведомления должны выглядеть в виде стопки с уведомлениями и чтобы у этого уведомления был крестик в правом верхнем углу, чтобы удалить это уведомление из родительского виджета. Как я понимаю нужно к label добавить какие-то нестандартные стили.

Офлайн

#2 Март 20, 2016 06:31:51

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

PyQt создание нестандартного виджета

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

Отредактировано vic57 (Март 20, 2016 08:56:41)

Офлайн

#3 Март 20, 2016 13:18:01

marina932
Зарегистрирован: 2016-02-22
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt создание нестандартного виджета

Спасибо за отклик, но это даже близко не похоже на то, что надо.

Офлайн

#4 Март 20, 2016 19:17:47

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

PyQt создание нестандартного виджета

Офлайн

#5 Март 20, 2016 19:49:06

dima2881
Зарегистрирован: 2016-01-09
Сообщения: 39
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt создание нестандартного виджета

vic57
Ну опять же, прям очевидно, что это прям в корне не то о чем говорю я.

Офлайн

#6 Март 20, 2016 19:54:48

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

PyQt создание нестандартного виджета

выражайся яснее, код свой покажи

Офлайн

#7 Март 20, 2016 20:12:05

dima2881
Зарегистрирован: 2016-01-09
Сообщения: 39
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt создание нестандартного виджета

Я не знаю куда яснее. Для однозначности своих целей я выложил картинку. Нужно примерно-тоже самое как на картинке.

Офлайн

#8 Март 20, 2016 20:40:05

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

PyQt создание нестандартного виджета

dima2881
Я не знаю куда яснее. Для однозначности своих целей я выложил картинку. Нужно примерно-тоже самое как на картинке.
код в студию

Офлайн

#9 Март 21, 2016 12:39:52

alex925
Зарегистрирован: 2015-01-08
Сообщения: 204
Репутация: +  14  -
Профиль   Отправить e-mail  

PyQt создание нестандартного виджета

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)

Прикреплённый файлы:
attachment Снимок экрана 2016-03-21 в 14.38.23.png (27,3 KБ)

Офлайн

#10 Март 21, 2016 12:41:46

marina932
Зарегистрирован: 2016-02-22
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt создание нестандартного виджета

То, что было надо, спасибо)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version