Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- import random
- from PyQt6.QtWidgets import (
- QApplication, QMainWindow, QWidget, QVBoxLayout,
- QPushButton, QLabel, QLineEdit, QHBoxLayout, QFrame
- )
- from PyQt6.QtCore import Qt, QPoint
- from PyQt6.QtGui import QColor, QIcon, QPixmap, QMouseEvent, QCursor, QPainter, QBrush
- AMERICAN_NAMES = [
- "James", "Mary", "John", "Patricia", "Robert", "Jennifer",
- "Michael", "Linda", "William", "Elizabeth", "David", "Barbara",
- "Richard", "Susan", "Joseph", "Jessica", "Thomas", "Sarah",
- "Charles", "Karen", "Christopher", "Nancy", "Daniel", "Lisa",
- "Matthew", "Betty", "Anthony", "Margaret", "Mark", "Sandra"
- ]
- class CustomTitleBar(QFrame):
- def __init__(self, parent=None):
- super().__init__(parent)
- self.parent = parent
- self.setFixedHeight(40)
- self.setStyleSheet("""
- background-color: #2f80ed;
- color: white;
- """)
- self.layout = QHBoxLayout(self)
- self.layout.setContentsMargins(10, 0, 10, 0)
- self.layout.setSpacing(10)
- self.title_label = QLabel("Random Name Generator")
- self.title_label.setStyleSheet("font-weight: bold; font-size: 14px;")
- self.layout.addWidget(self.title_label)
- self.layout.addStretch()
- self.min_btn = QPushButton("—")
- self.max_btn = QPushButton("❐")
- self.close_btn = QPushButton("✕")
- for btn in (self.min_btn, self.max_btn, self.close_btn):
- btn.setFixedSize(30, 30)
- btn.setStyleSheet("""
- QPushButton {
- border: none;
- background-color: transparent;
- color: white;
- font-size: 16px;
- }
- QPushButton:hover {
- background-color: rgba(255, 255, 255, 0.2);
- }
- """)
- btn.setCursor(Qt.CursorShape.PointingHandCursor)
- self.layout.addWidget(self.min_btn)
- self.layout.addWidget(self.max_btn)
- self.layout.addWidget(self.close_btn)
- self.min_btn.clicked.connect(self.parent.showMinimized)
- self.max_btn.clicked.connect(self.toggle_max_restore)
- self.close_btn.clicked.connect(self.parent.close)
- self._is_maximized = False
- self._start_pos = None
- def toggle_max_restore(self):
- if self._is_maximized:
- self.parent.showNormal()
- self._is_maximized = False
- self.max_btn.setText("❐")
- else:
- self.parent.showMaximized()
- self._is_maximized = True
- self.max_btn.setText("❐")
- def mousePressEvent(self, event: QMouseEvent):
- if event.button() == Qt.MouseButton.LeftButton:
- self._start_pos = event.globalPosition().toPoint()
- self._click_pos = self.mapToParent(event.position().toPoint())
- super().mousePressEvent(event)
- def mouseMoveEvent(self, event: QMouseEvent):
- if self._start_pos:
- delta = event.globalPosition().toPoint() - self._start_pos
- new_pos = self.parent.pos() + delta
- self.parent.move(new_pos)
- self._start_pos = event.globalPosition().toPoint()
- super().mouseMoveEvent(event)
- def mouseReleaseEvent(self, event: QMouseEvent):
- self._start_pos = None
- super().mouseReleaseEvent(event)
- class MainWindow(QMainWindow):
- def __init__(self):
- super().__init__()
- # Remove native title bar and frame
- self.setWindowFlags(Qt.WindowType.FramelessWindowHint | Qt.WindowType.Window)
- self.setMinimumSize(400, 250)
- # Central widget and layout
- self.central_widget = QWidget()
- self.central_layout = QVBoxLayout(self.central_widget)
- self.central_layout.setContentsMargins(0, 0, 0, 0)
- self.central_layout.setSpacing(0)
- self.setCentralWidget(self.central_widget)
- # Custom title bar
- self.title_bar = CustomTitleBar(self)
- self.central_layout.addWidget(self.title_bar)
- # Main content container
- self.content = QWidget()
- self.content.setStyleSheet("background-color: #f4f6f8;")
- self.content_layout = QVBoxLayout(self.content)
- self.content_layout.setSpacing(15)
- self.content_layout.setContentsMargins(20, 20, 20, 20)
- self.central_layout.addWidget(self.content)
- # Label
- self.label = QLabel("Random Name Generator")
- self.label.setAlignment(Qt.AlignmentFlag.AlignCenter)
- self.label.setStyleSheet("font-size: 16px; color: #333;")
- self.content_layout.addWidget(self.label)
- # Input field
- self.input_field = QLineEdit()
- self.input_field.setFixedHeight(32)
- self.input_field.setPlaceholderText("Click the button to generate a name")
- self.input_field.setReadOnly(True)
- self.input_field.setStyleSheet("""
- QLineEdit {
- background-color: white;
- border: none;
- border-radius: 8px;
- padding: 0 10px;
- font-size: 14px;
- }
- """)
- self.add_shadow(self.input_field)
- self.content_layout.addWidget(self.input_field)
- # Button
- self.button = QPushButton("Generate Name")
- self.button.setFixedHeight(36)
- self.button.setStyleSheet("""
- QPushButton {
- background-color: #4a90e2;
- color: white;
- border: none;
- border-radius: 8px;
- font-size: 14px;
- }
- QPushButton:hover {
- background-color: #357ABD;
- }
- QPushButton:pressed {
- background-color: #2C5DA3;
- }
- """)
- self.add_shadow(self.button)
- self.button.clicked.connect(self.generate_name)
- self.content_layout.addWidget(self.button)
- def generate_name(self):
- name = random.choice(AMERICAN_NAMES)
- self.input_field.setText(name)
- def add_shadow(self, widget):
- from PyQt6.QtWidgets import QGraphicsDropShadowEffect
- shadow = QGraphicsDropShadowEffect()
- shadow.setBlurRadius(15)
- shadow.setXOffset(0)
- shadow.setYOffset(3)
- shadow.setColor(QColor(0, 0, 0, 80))
- widget.setGraphicsEffect(shadow)
- def main():
- app = QApplication(sys.argv)
- window = MainWindow()
- window.show()
- sys.exit(app.exec())
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment