Ярлык PyQt5 с центрированным отображением изображения (QLabel)

Прежде всего! ! ! ! Ответьте на содержание заголовка:

Мне нужно добавить строку кода

#别忘了引入欧
from PyQt5.QtCore import Qt
self.label.setAlignment(Qt.AlignCenter) 

Теги PyQt5 часто используемые методы для отображения изображений

Общее введение

Виджеты QLabel обеспечивают отображение текста или изображения.
QLabel используется для отображения текста или изображений. Функция взаимодействия с пользователем не предусмотрена. Внешний вид метки можно настроить различными способами и использовать для указания мнемонического ключа фокуса другого виджета.
QLabel может содержать любой из следующих типов содержимого:
Вставьте описание изображения сюда
при изменении содержимого с использованием любого метода любое предыдущее содержимое очищается.

Предупреждение: при использовании setText () для установки текстового содержимого в QLabel QLabel попытается угадать, отображает ли он текст как обычный текст или форматированный текст как часть разметки HTML 4. Если вы хотите явно отобразить текстовый формат, вызовите setTextFormat (), например, если вы хотите, чтобы текст был в обычном текстовом формате, но вы не можете управлять источником текста (например, при отображении данных, загруженных из Интернета).
По умолчанию на этикетке отображаются текст и изображения с выравниванием по левому краю и вертикально по центру. Внешний вид QLabel можно настраивать и настраивать разными способами.
Вы можете использовать setAlignment () и setIndent () для настройки позиционирования содержимого в области виджета QLabel. Текстовое содержимое также можно обернуть по границам слова с помощью setwordpwrap ().
Например, этот код устанавливает утопленную панель с двумя строками текста в правом нижнем углу (две строки находятся на одном уровне с правой стороной метки):

label = QLabel(self)
label.resize(200,100)
label.setFrameStyle(QFrame.Panel | QFrame.Sunken)
label.setText("first line\nsecond line")
label.setAlignment(Qt.AlignBottom | Qt.AlignRight)
QLabel从QFrame继承的属性和函数,也可以用来指定要用于任何给定标签的构件框架。

Для получения дополнительной информации посетите официальный сайт.

Небольшой пример QLabel

Вставьте описание изображения сюда

核心代码如下:
class Example(QWidget):

    def initUI(self):

        self.lb1 = QLabel('学点编程吧,我爱你~!',self)
        self.lb2 = QLabel('我内容很少哦...',self)
        self.lb3 = QLabel('我内容很少哦...',self)
        self.lb3.setWordWrap(True)

        self.bt1 = QPushButton('输入内容1',self)
        self.bt2 = QPushButton('输入内容2',self)


        self.ra1 = QRadioButton('左边',self)
        self.ra2 = QRadioButton('中间',self)
        self.ra3 = QRadioButton('右边',self)

        self.bg1 = QButtonGroup(self)
        self.bg1.addButton(self.ra1, 1)
        self.bg1.addButton(self.ra2, 2)
        self.bg1.addButton(self.ra3, 3)

        self.show()

        self.bg1.buttonClicked.connect(self.rbclicked)
        self.bt1.clicked.connect(self.showDialog)
        self.bt2.clicked.connect(self.showDialog)

    def rbclicked(self):
        if self.bg1.checkedId() == 1:
            self.lb1.setAlignment(Qt.AlignVCenter | Qt.AlignLeft)
        elif self.bg1.checkedId() == 2:
            self.lb1.setAlignment(Qt.AlignCenter)
        elif self.bg1.checkedId() == 3:
            self.lb1.setAlignment(Qt.AlignVCenter | Qt.AlignRight)
    
    def showDialog(self):
        sender = self.sender()
            if sender == self.bt1:
                text, ok = QInputDialog.getText(self, '内容1', '请输入内容1:')
                if ok:
                    self.lb2.setText(text)
            elif sender == self.bt2:
                text, ok = QInputDialog.getText(self, '内容2', '请输入内容2:')
                if ok:
                    self.lb3.setText(str(text))

В этом примере в основном реализуются две функции:
выравнивание содержимого QLabel: здесь мы указываем три: левый центр, центр и правый центр.
Когда QLabel имеет много содержимого, содержимое внутри может быть перенесено. Здесь мы сравниваем его с двумя диалоговыми окнами ввода.

self.lb3 = QLabel('我内容很少哦...',self)
self.lb3.setWordWrap(True)

Установите для атрибута WordWrap значение True, чтобы реализовать автоматический перенос строк. По умолчанию автоматический перенос строк невозможен.

def rbclicked(self):
    if self.bg1.checkedId() == 1:
        self.lb1.setAlignment(Qt.AlignVCenter | Qt.AlignLeft)    elif self.bg1.checkedId() == 2:
        self.lb1.setAlignment(Qt.AlignCenter)    elif self.bg1.checkedId() == 3:
        self.lb1.setAlignment(Qt.AlignVCenter | Qt.AlignRight)

Когда мы нажимаем на разные переключатели, содержимое QLabel будет соответствующим образом выровнено. По умолчанию содержимое метки выравнивается по левому краю и по центру по вертикали. Другая ситуация такова: он содержит горизонтальные и вертикальные знаки, которые можно комбинировать для получения желаемого эффекта.
Горизонтальная метка:
Вставьте описание изображения сюда
вертикальная метка:
Вставьте описание изображения сюда
special:
Qt.AlignCenter: горизонтальное и вертикальное центрирование. Одновременно
можно использовать не более одной горизонтальной и одной вертикальной метки. Конечно, есть исключения, и следующее может показать два свойства.

Вставьте описание изображения сюда

部分核心代码如下:
class Example(QWidget):
    def initUI(self):

        lb = QLabel(self)

        html = '''
                <style type="text/css">
                    table.imagetable {
                        font-family: verdana,arial,sans-serif;
                        font-size:11px;
                        color:#333333;
                        border-width: 1px;
                        border-color: #999999;
                        border-collapse: collapse;
                    }
                  #...里面众多的CSS内容,我就省略了,节约空间
            '''
        lb.setText(html)
        self.show()

Текстовый виджет PyQt5 может отображать форматированный текст, который задается подмножеством тегов HTML4. Для получения информации о конкретном содержании, пожалуйста, обратитесь к официальному документу: https://doc.qt.io/qt-5/richtext-html-subset .html поддерживаются часто используемые теги HTML и атрибуты CSS.

Изображение презентации

部分核心代码如下:
class Example(QWidget):
    def initUI(self):

        pix = QPixmap('sexy.jpg')

        lb1 = QLabel(self)
        lb1.setGeometry(0,0,300,200)
        lb1.setStyleSheet("border: 2px solid red")
        lb1.setPixmap(pix)

        lb2 = QLabel(self)
        lb2.setGeometry(0,250,300,200)
        lb2.setPixmap(pix)
        lb2.setStyleSheet("border: 2px solid red")
        lb2.setScaledContents(True)

Демонстрация изображения представляет собой сравнительную демонстрацию.

Сначала мы используем QPixmap () для создания объекта QPixmap, а затем вставляем его в два объекта QLabel соответственно.Разница заключается в следующем:

Мы вставляем lb1 непосредственно в
lb2 и включаем setScaledContents (True). Смысл этой функции заключается в том, масштабировать ли его содержимое, чтобы заполнить все доступное пространство. Если этот параметр включен, метка отображает растровое изображение, которое масштабирует растровое изображение, чтобы заполнить доступное пространство. Значение этого атрибута по умолчанию - False.
setStyleSheet () позволяет каждому проверить диапазон размеров установленной нами метки. Подробное объяснение см. В предыдущей главе «ЖК-дисплей».

Анимационная презентация

部分核心代码如下:

class Example(QWidget):

    def initUI(self):

        self.lb = QLabel(self)
        self.lb.setGeometry(100,50,300,200)

        self.bt1 = QPushButton('开始',self)
        self.bt2 = QPushButton('停止',self)

        self.pix = QPixmap('movie.gif')
        self.lb.setPixmap(self.pix)
        self.lb.setScaledContents(True)

        self.bt1.clicked.connect(self.run)
        self.bt2.clicked.connect(self.run)

        self.show()
    def run(self):
        movie = QMovie("movie.gif")
        self.lb.setMovie(movie)
        if self.sender() == self.bt1:
            movie.start()
        else:
            movie.stop()
            self.lb.setPixmap(self.pix)

Неожиданно у QLabel также есть этот жестокий навык, который воспроизводит анимацию. . .
Ключом к этому коду является использование QMovie, давайте кратко представим его.
Класс QMovie - удобный класс для воспроизведения анимации с помощью QImageReader.
Этот класс используется для отображения простой анимации без звука. Если вы хотите отображать видео и мультимедийный контент, используйте вместо этого мультимедийный фреймворк Qt.

Сначала создадим объект QMovie. Перед запуском фильма вы можете вызвать isValid (), чтобы проверить, действительны ли данные изображения. Чтобы запустить фильм, вызовите start (). QMovie перейдет в рабочее состояние и вызовет start () и stateChanged (). Чтобы получить текущее состояние фильма, вызовите state ().
Чтобы отобразить фильм в приложении, вы можете передать объект QMovie в QLabel.setMovie (). пример:

label = QLabel(self)
movie = QMovie("animations/fire.gif")
label.setMovie(movie)
movie.start()

Каждый раз, когда в фильме появляется новый кадр, QMovie отправляет сигнал updated (). Если размер кадра изменяется, выдается сигнал resized (). Вы можете вызвать currentImage () или currentPixmap (), чтобы получить копию текущего кадра. Когда фильм закончен, QMovie выдает команду finished (). Если во время воспроизведения возникает ошибка (то есть файл изображения поврежден), QMovie выдаст ошибку ().
Вы можете управлять скоростью воспроизведения фильма, вызывая setSpeed ​​(). SetSpeed ​​() принимает процент от исходной скорости в качестве параметра. Приостановите фильм, вызвав setPaused (True). QMovie перейдет в состояние паузы и вызовет stateChanged (). Если вы вызовете setPaused (False), QMovie повторно войдет в состояние выполнения и снова запустит фильм. Чтобы остановить фильм, используйте stop ().
Некоторые форматы анимации позволяют установить цвет фона. Вы можете вызвать setBackgroundColor (), чтобы установить цвет, или вызвать backgroundColor (), чтобы получить текущий цвет фона.
currentFrameNumber () возвращает порядковый номер текущего кадра. Если формат изображения поддерживается, frameCount () вернет общее количество кадров в анимации. Вы можете вызвать loopCount (), чтобы узнать, сколько раз фильм должен зацикливаться перед завершением. nextFrameDelay () возвращает количество миллисекунд, в течение которых должен отображаться текущий кадр.
Вы можете указать QMovie кэшировать кадры анимации, вызвав setCacheMode ().
Вызовите supportedFormats (), чтобы получить список форматов, поддерживаемых QMovie.

def run(self):
    movie = QMovie("movie.gif")
    self.lb.setMovie(movie)
    if self.sender() == self.bt1:
        movie.start()
    else:
        movie.stop()
        self.lb.setPixmap(self.pix)

Эта функция очень проста: при нажатии кнопки «Старт» воспроизводится анимация, при нажатии кнопки «Стоп» анимация останавливается.

Перепечатано по адресу: https://zhuanlan.zhihu.com/p/32134728

рекомендация

отblog.csdn.net/lockhou/article/details/113408429