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
QWidgetto 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.
PyQtPySideRotatedWidgetQGraphicsViewQGraphicsProxyWidgetCustom WidgetsGUI DevelopmentWidget 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
