129 lines
3.3 KiB
Python
129 lines
3.3 KiB
Python
"""Traffic lights control example.
|
|
|
|
Demonstrates hiding, showing, and repositioning the macOS window
|
|
traffic lights (close, minimize, zoom buttons).
|
|
"""
|
|
|
|
import sys
|
|
|
|
from PySide6.QtCore import Qt
|
|
from PySide6.QtWidgets import (
|
|
QApplication,
|
|
QHBoxLayout,
|
|
QLabel,
|
|
QMainWindow,
|
|
QPushButton,
|
|
QVBoxLayout,
|
|
QWidget,
|
|
)
|
|
|
|
import pyqt_liquidglass as glass
|
|
|
|
|
|
class MainWindow(QMainWindow):
|
|
def __init__(self) -> None:
|
|
super().__init__()
|
|
self.setWindowTitle("Traffic Lights Demo")
|
|
self.resize(500, 300)
|
|
|
|
self._lights_visible = True
|
|
|
|
central = QWidget()
|
|
central.setStyleSheet("background: transparent;")
|
|
|
|
layout = QVBoxLayout(central)
|
|
layout.setContentsMargins(40, 80, 40, 40)
|
|
layout.setSpacing(20)
|
|
|
|
title = QLabel("Traffic Lights Control")
|
|
title.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
|
title.setStyleSheet(
|
|
"""
|
|
font-size: 22px;
|
|
font-weight: 600;
|
|
color: white;
|
|
background: transparent;
|
|
"""
|
|
)
|
|
|
|
description = QLabel(
|
|
"The traffic lights have been repositioned.\n"
|
|
"Use the buttons below to hide or show them."
|
|
)
|
|
description.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
|
description.setStyleSheet(
|
|
"""
|
|
font-size: 13px;
|
|
color: rgba(255, 255, 255, 0.7);
|
|
background: transparent;
|
|
"""
|
|
)
|
|
|
|
buttons_layout = QHBoxLayout()
|
|
buttons_layout.setSpacing(12)
|
|
|
|
self.toggle_button = QPushButton("Hide Traffic Lights")
|
|
self.toggle_button.setStyleSheet(self._button_style())
|
|
self.toggle_button.clicked.connect(self._toggle_traffic_lights)
|
|
|
|
buttons_layout.addStretch()
|
|
buttons_layout.addWidget(self.toggle_button)
|
|
buttons_layout.addStretch()
|
|
|
|
layout.addWidget(title)
|
|
layout.addWidget(description)
|
|
layout.addStretch()
|
|
layout.addLayout(buttons_layout)
|
|
|
|
self.setCentralWidget(central)
|
|
|
|
def _button_style(self) -> str:
|
|
return """
|
|
QPushButton {
|
|
background: rgba(255, 255, 255, 0.15);
|
|
border: none;
|
|
border-radius: 8px;
|
|
padding: 12px 24px;
|
|
color: white;
|
|
font-size: 13px;
|
|
min-width: 160px;
|
|
}
|
|
QPushButton:hover {
|
|
background: rgba(255, 255, 255, 0.25);
|
|
}
|
|
QPushButton:pressed {
|
|
background: rgba(255, 255, 255, 0.1);
|
|
}
|
|
"""
|
|
|
|
def _toggle_traffic_lights(self) -> None:
|
|
if self._lights_visible:
|
|
glass.hide_traffic_lights(self)
|
|
self.toggle_button.setText("Show Traffic Lights")
|
|
else:
|
|
glass.show_traffic_lights(self)
|
|
self.toggle_button.setText("Hide Traffic Lights")
|
|
self._lights_visible = not self._lights_visible
|
|
|
|
|
|
def main() -> int:
|
|
app = QApplication(sys.argv)
|
|
|
|
window = MainWindow()
|
|
|
|
glass.prepare_window_for_glass(window)
|
|
|
|
window.show()
|
|
|
|
# Apply glass to window
|
|
glass.apply_glass_to_window(window)
|
|
|
|
# Reposition traffic lights with custom offset
|
|
glass.setup_traffic_lights_inset(window, x_offset=20, y_offset=16)
|
|
|
|
return app.exec()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|