Питон, графика, окна произвольной формы без заголовка

Есть ли возможность создать окно произвольной формы в библиотеках pygame, pyglet, tkinter? (ЯП питон)

Я долго искал, как создавать графические окна в питон, под форму картинки, но нашёл только про библиотеку PyQt5, которая всё время глючит. Но не может же так быть, что такая возможность есть только в этой библиотеке?!


Ответы (1 шт):

Автор решения: S. Nick

Sorry, я плохо понимаю ваш вопрос. Вернее я понимаю, что вам надо создать окно произвольной формы используя библиотеках pygame, pyglet, tkinter. Но зачем вы наговариваете на PyQt5, я совсем не понимаю.

Прежде чем запустить мой пример, убедитесь, что вы установили PyQt5

pip install PyQt5
pip install pyqt5-tools

PyQt — реализация фреймворка Qt для языка Python.

import sys
from PyQt5 import QtCore, QtWidgets, QtGui

 
class Demo(QtWidgets.QWidget):
    def __init__(self):
        super().__init__() 

        pixmap = QtGui.QPixmap("Ok.png").scaled(
            350, 350, QtCore.Qt.KeepAspectRatio, QtCore.Qt.FastTransformation)

        pal = self.palette()
        pal.setBrush(QtGui.QPalette.Normal, QtGui.QPalette.Window, QtGui.QBrush(pixmap))
        pal.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, QtGui.QBrush(pixmap))
        self.setPalette(pal)
        self.setMask(pixmap.mask())

        label = QtWidgets.QLabel('<h1 style="color: red;">Hello World!</h1>', self)
        label.move(80, 120)
        button = QtWidgets.QPushButton("Закрыть окно", self)
        button.setFixedSize(120, 30)
        button.move(90, 220)
        button.clicked.connect(QtWidgets.qApp.quit)

        self.offset = None
        self.installEventFilter(self)

    def eventFilter(self, source, event):
        if event.type() == QtCore.QEvent.MouseButtonPress:
            self.offset = event.pos()
        elif event.type() == QtCore.QEvent.MouseMove and self.offset is not None:
            self.move(self.pos() - self.offset + event.pos())
            return True
        elif event.type() == QtCore.QEvent.MouseButtonRelease:
            self.offset = None
        return super().eventFilter(source, event)

        
if __name__=='__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = Demo()
    w.resize(350, 350)
    w.show()
    sys.exit(app.exec_())

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

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

→ Ссылка