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 hashes)

Uploaded Source

Built Distribution

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

Uploaded Python 3

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