Giter Club home page Giter Club logo

pyqt-custom-titlebar-window's Introduction

pyqt-custom-titlebar-window

PyQt custom titlebar window(resizable, movable, minimize/maximize/close).

User can set modernized and customized frame surrounding the widget you made.

You can set the title bar separately or set the menu bar as title bar.

Basic buttons like min/max/close are automatically set by user's OS.

You can set your customized buttons(e.g. min/max/close).

You can drag title bar or menu bar on widget to move the window, double-click it to show maximize/normal.

This also makes the application's font look much better by setting the font family to 'Arial'(which looks modern and commonly used), antialiasing the font.

The range of font size is set to 9~12 which is not too big, not too small.

If you want to set custom titlebar easily than use pyqt-custom-titlebar-setter.

If you want to use this in various ways than use this directly. see the example below.

Table of Contents

Requirements

PyQt5 >= 5.15 - This package is using startSystemMove, startSystemResize which were both introduced in Qt 5.15.

Setup

python -m pip install pyqt-custom-titlebar-window

Included Packages

Feature

  • If you drag the frame, window will be resized.
  • If you drag the title bar(menu bar if there is no title bar) of inner widget, window will be moved.
  • If you double-click the menu bar, window will be maximized/normalized.
  • Set the window title by itself if you set your inner widget's title with setWindowTitle. It also catches the windowTitleChanged signal of your inner widget.
  • Support close event(QCloseEvent) of inner widget.
  • Support full screen feature. When you turn the full screen feature on, top title bar will disappear, become unable to resize and move. Turn it off to make title bar reappear and make it enable to move and resize.
  • Set minimum size based on inner widget's size by default.
  • CustomTitlebarWindow(CustomizedWidgetByUser()) - Constructor.
  • setTopTitleBar(self, title: str = '', icon_filename: str = '', font: QFont = QFont('Arial', 14), align=Qt.AlignCenter, bottom_separator=False) to set title bar on the top of the window.
  • setButtons(btnWidget=None, align=Qt.AlignRight) to add buttons(e.g. min/max/close) on the top right/left corner of title/menu bar. If btnWidget is set to None, buttons' style are automatically set to your platform/OS friendly style. Basically you can give btnWidget to your customized buttons(pyqt-titlebar-buttons-widget). I will explain it better. Sorry for weak explanation.
  • setButtonHint(hint) to set hints of buttons. There are three options available(close, min/close, min/max/close). Default value is min/max/close.
  • setMenuAsTitleBar(self, title: str = '', icon_filename: str = '', font: QFont = QFont('Arial', 9)) to set the icon and title not only on the left side of menu bar, but also set it as window icon and title.

Note: using this function, macOS button will be positioned to right which is unorthodox.

  • Frame's color synchronizes with the QMenuBar's background color or inner QWidget's color if inner widget is not QMainWindow.
  • getCornerWidget() to get corner widget of QMenuBar easily
  • getInnerWidget() to get inner widget easily

Example

Code Sample (Menu bar only)

from PyQt5.QtWidgets import QApplication
from pyqt_custom_titlebar_window import CustomTitlebarWindow
from pyqt_dark_calculator import Calculator

if __name__ == "__main__":
  import sys

  app = QApplication(sys.argv)
  customTitlebarWindow = CustomTitlebarWindow(Calculator())
  customTitlebarWindow.setMenuAsTitleBar(icon_filename='calculator.svg')
  # customTitlebarWindow.setButtonHint(hint=['close'])
  customTitlebarWindow.setButtons()
  customTitlebarWindow.show()
  app.exec_()

In the code sample, pyqt-dark-calculator is being used as inner widget.

Result

image

Here's another example with pyqt-dark-notepad.

image

As you see, existing corner widget doesn't matter.

Code Sample (Including title bar)

from PyQt5.QtWidgets import QApplication
from pyqt_custom_titlebar_window import CustomTitlebarWindow
from pyqt_dark_notepad import DarkNotepad

if __name__ == "__main__":
  import sys

  app = QApplication(sys.argv)
  window = DarkNotepad()
  customTitlebarWindow = CustomTitlebarWindow(window)
  customTitlebarWindow.setTopTitleBar(icon_filename='dark-notepad.svg')
  # customTitlebarWindow.setButtonHint(['close'])
  customTitlebarWindow.setButtons()
  customTitlebarWindow.show()
  app.exec_()

Result

image

pyqt-custom-titlebar-window's People

Contributors

yjg30737 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

pyqt-custom-titlebar-window's Issues

How to you change all backgrounds ?

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = CustomTitlebarWindow(Window())
    window.setTopTitleBar('English(ﻑﺍﺮﺴﯾ)' ,  '2.svg' , QFont('Arial', 14) , align=Qt.AlignLeft)
    window.setWindowIcon(QIcon('2.svg'))
    #window.setFrameColor("cyan")
    window.setStyleSheet('background-color: qlineargradient(x1: 0, x2: 1, stop: 0 red, stop: 1 cyan);')
    #window.setStyleSheet(css)
    window.setButtonHint(['close'])
    window.setButtons(btnWidget=None, align=Qt.AlignRight)

#    window = Window()
    window.show()
    app.exec()

########################################################################
window.setStyleSheet('background-color: qlineargradient(x1: 0, x2: 1, stop: 0 red, stop: 1 cyan);')
########################################################################
this command not change background color buttons and title?

my OS
Fedora linux
WM=i3

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.