RotatedWidget
is a custom PyQt/PySide widget that provides dynamic rotation capabilities for any QWidget
. It leverages QGraphicsView
and QGraphicsProxyWidget
to enable flexible and efficient rotation while maintaining widget functionality and layout properties.
- Rotate any
QWidget
to a custom angle (default is 270 degrees). - Dynamic resizing with preservation of aspect ratio (optional).
- Seamless integration into PyQt or PySide applications.
- Automatic handling of size policies and layout constraints.
- Clone this repository:
git clone https://github.com/your_username/RotatedWidget.git cd RotatedWidget
- Install the required dependencies:
pip install PySide2 # Or PySide6/PyQt6/PyQt5/PyQt4/PySide based on your preference
- Install the package:
python setup.py install
from PySide2.QtWidgets import QApplication, QPushButton, QHBoxLayout, QWidget
from balQt.rotated_widget import RotatedWidget
# Create the application
app = QApplication([])
# Main window setup
window = QWidget()
window.setWindowTitle("Rotated Widget Example")
layout = QHBoxLayout(window)
# Create a normal QPushButton
normal_button = QPushButton("Normal Button")
layout.addWidget(normal_button)
# Create a rotated button
rotated_button = QPushButton("Rotated Button")
rotated_widget = RotatedWidget(rotated_button, angle=270)
layout.addWidget(rotated_widget)
window.show()
# Run application
app.exec_()
Rotate a QLabel
by 90 degrees and display it in a layout.
from PySide2.QtWidgets import QLabel
label = QLabel("Rotated Text")
rotated_label = RotatedWidget(label, angle=90)
layout.addWidget(rotated_label)
To maintain the aspect ratio of the widget while rotating:
rotated_widget = RotatedWidget(rotated_button, angle=45, preserve_aspect_ratio=True)
A custom widget that rotates a child widget.
Parameters:
widget (QWidget)
: The widget to be rotated.angle (float)
: The rotation angle in degrees (default is 270).parent (QWidget, optional)
: Parent widget (default isNone
).preserve_aspect_ratio (bool, optional)
: Whether to preserve the original aspect ratio (default isFalse
).
Methods:
__init__(widget, angle=270, parent=None, preserve_aspect_ratio=False)
: Initializes theRotatedWidget
.sizeHint()
: Returns size hint considering rotation.update_size_policy()
: Adjusts the size policy of the rotated widget.
- Dynamic GUI Designs:
- Rotate labels, buttons, or other widgets for non-standard layouts.
- Control Panels:
- Display side-panel controls with rotated text or interactive elements.
- Visualization Dashboards:
- Rotate custom widgets within graphical data presentations.
- Interactive Games or Tools:
- Provide unique orientations for game elements or UI tools.
Contributions are welcome! To contribute:
- Fork the repository.
- Create a new branch (
git checkout -b feature/new-feature
). - Commit your changes (
git commit -m "Add new feature"
). - Push to the branch (
git push origin feature/new-feature
). - Open a pull request.
This project is licensed under the MIT License. See the LICENSE file for details.
PyQt
PySide
RotatedWidget
QGraphicsView
QGraphicsProxyWidget
Custom Widgets
GUI Development
Widget Rotation
StackedWidget/
├── balQt
│ ├── __init__.py
│ ├── rotated_widget.py
│ └── tools.py
├── images
│ └── screenshot.png
├── .gitignore # Ignore artifacts
├── example.py # Usage example
├── LICENSE # License file
├── README.md # Documentation
└── setup.py # Setup file