Skip to main content

A resizable movable frameless window for PySide6.

Project description

QtFrameless

QtFrameless


Overview

A PySide6 Implementation of a draggable, resizable, and frameless QMainWindow widget. It comes with a built in title bar with standard close, maximize and minimize buttons, however it users can also provide their own Titlebar QWidget subclass.

Features

  • Frameless
  • Custom Title Bar
  • Resizeable
  • Draggable
  • Pluggable
  • Extensible

Install

Using PyPi

pip install QtFrameless

Using git

git clone https://github.com/alexpdev/QtFrameless.git
cd QtFrameless
pip install .

Examples

The simplest possible example:

from PySide6.QtWidgets import QApplication
from QtFrameless import FramelessWindow

app = QApplication([])
FramelessWindow().show()
app.exec()

basic.py


Another simple Hello World example that uses subclassing and changes the window title.

from PySide6.QtWidgets import QApplication
from QtFrameless import FramelessWindow

class MainWindow(FramelessWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("HELLO WORLD!")

helloworld


Example that creates a QTextEdit widget as the central widget.

from PySide6.QtWidgets import QApplication, QTextEdit
from QtFrameless import FramelessWindow

class MainWindow(FramelessWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Text Editor")
        self.textEdit = QTextEdit(parent=self)
        self.setCentralWidget(self.textEdit)
        self.setStyleSheet("QTextEdit {border: 1px solid black;}")

texteditor


An example of providing a custom widget class to use as the title bar.

from PySide6.QtWidgets import *
from QtFrameless import FramelessWindow

class TitleBar(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent=parent)
        self.layout = QHBoxLayout(self)
        self.setup_menubar()
        self.button = QPushButton("CLOSE", self)
        self.button.clicked.connect(app.exit)
        self.layout.addWidget(self.menu_bar)
        self.layout.addWidget(self.button)
        self.setMaximumHeight(50)

    def setup_menubar(self):
        self.menu_bar = QMenuBar()
        self.file_menu = QMenu("File")
        self.options_menu = QMenu("Options")
        self.edit_menu = QMenu("Edit")
        self.menu_bar.addMenu(self.options_menu)
        self.menu_bar.addMenu(self.file_menu)
        self.menu_bar.addMenu(self.edit_menu)
        self.save_action = QAction("Save")
        self.exit_action = QAction("Exit")
        self.about_action = QAction("About")
        self.copy_action = QAction("Copy")
        self.paste_action = QAction("Paste")
        self.cut_action = QAction("Cut")
        self.file_menu.addActions([self.save_action, self.exit_action])
        self.edit_menu.addActions(
            [self.copy_action, self.cut_action, self.paste_action])
        self.options_menu.addAction(self.about_action)

if "main" in __name__:
    app = QApplication([])
    window = FramelessWindow(titleBar=TitleBar)
    window.show()
    app.exec()

customtitlebar.py

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

QtFrameless-0.1.4.tar.gz (34.0 kB view details)

Uploaded Source

Built Distribution

QtFrameless-0.1.4-py3-none-any.whl (15.6 kB view details)

Uploaded Python 3

File details

Details for the file QtFrameless-0.1.4.tar.gz.

File metadata

  • Download URL: QtFrameless-0.1.4.tar.gz
  • Upload date:
  • Size: 34.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for QtFrameless-0.1.4.tar.gz
Algorithm Hash digest
SHA256 5eaa270742a4561b34e7c0b90878ccaa6f1ab193d60aa6e6cfff68b20c827591
MD5 ac65d185bc940ad7649707a86695909e
BLAKE2b-256 ec9c14288d451ff1b9dcb4347143989ddb38bb152eb17b07bf3d35658c0d04f0

See more details on using hashes here.

File details

Details for the file QtFrameless-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: QtFrameless-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 15.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for QtFrameless-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 6efe62bd312ccb11ea78956241c805d497cf114b84ae3bb1f6882f2c46967351
MD5 5139e26339c36ebcb94e1404ccb319f8
BLAKE2b-256 4e197c9b5bd40bc3edb96118c4f5d72634f37d06f8ba71656e82234cbcf6a7d8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page