021.PyQt5_QWidget_顶层窗口相关

顶层窗口相关

  1. 图标
    设置窗口图标:setWindowIcon(QIcon("resource/header_icon.png"))
    获取窗口图标对象:windowIcon()
    
  2. 标题
    设置窗口标题:setWindowTitle("HelloWorld")
    
    获取窗口标题:windowTitle()
    
  3. 不透明度
    设置不透明度:setWindowOpacity(float)
            参数:0.0 ~ 1.0  数值越小,窗口背景越透明
            
    获取不透明度:windowOpacity()
    
  4. 窗口状态
    设置窗口状态:setWindowState(state)
            参数:Qt.WindowNoState      # 无状态
                  Qt.WindowMinimized    # 最小化
                  Qt.WindowMaximized    # 最大化
                  Qt.WindowFullScreen   # 全屏
                  Qt.WindowActive       # 激活当前窗口
                  
    获取窗口状态:windowState()
    
  5. 窗口最大/最小化显示
    控制窗口显示状态: showFullScreen()      # 全屏显示窗口,不包含窗口框架(标题栏)
                      showMaximized()       # 最大化显示库存,包含窗口框架
                      showMinimized()       # 最小化显示窗口,包含窗口框架
                      showNormal()          # 显示标准大小窗口,包含窗口框架
                    
    判断窗口显示状态: isMinimized()         # 是否是最小化窗口
                      isMaximized()         # 是否是最大化窗口
                      isFullScreen()        # 是否是全屏
    
    • 一般设置窗口最大/最小化都是通过窗口最大/最小显示设置。窗口状态的方式设置最大/最小化用于制作自定义标题栏时
  6. 窗口标志
    设置窗口标志:window.setWindowFlags(Qt.WindowStaysOnTopHint)
                窗口样式参数:
                          Qt.Widget         # 默认。是一个窗口或者控件。
                                            # 有父控件,就是一般控件。
                                            # 没父控件,就是窗口,有窗口边框和标题栏(图标、标题、最小化、最大化、关闭)
                          Qt.Window         # 是一个窗口,有窗口边框和标题栏(图标、标题、最小化、最大化、关闭)
                          Qt.Dialog         # 是一个对话框窗口,有窗口边框和标题栏(图标、标题、问号、关闭)
                          Qt.Sheet          # 是一个窗口或部件Macintosh表单
                          Qt.Drawer         # 是一个窗口或部件Macintosh抽屉
                          Qt.Popup          # 是一个弹出式顶层窗口,没有窗口边框和标题栏
                          Qt.Tool           # 是一个工具窗口
                          Qt.ToolTip        # 是一个提示窗口,没有标题栏和窗口边框
                          Qt.SplashScreen   # 是一个欢迎窗口,是QSplashScreen构造函数的默认值
                          Qt.SubWindow      # 是一个子窗口
                          
                顶层窗口外观标志参数:
                          Qt.MSWindowsFixedSizeDialogHint       # 窗口无法调整大小
                          Qt.FramelessWindowHint                # 窗口无边框
                          Qt.CustomizeWindowHint                # 有边框但无标题栏和按钮,不能移动和拖动。
                          Qt.WindowTitleHint                    # 添加标题栏和一个不可用的关闭按钮
                          Qt.WindowSystemMenuHint               # 添加系统目录和一个关闭按钮
                          Qt.WindowMaximizeButtonHint           # 激活最大化和关闭按钮,禁止最小化按钮
                          Qt.WindowMinimizeButtonHint           # 激活最小化和关闭按钮,禁止最大化按钮
                          Qt.WindowMinMaxButtonsHint            # 激活最小化,最大化和关闭按钮
                          Qt.WindowCloseButtonHint              # 添加一个关闭按钮
                          Qt.WindowContextHelpButtonHint        # 添加问号和关闭按钮,同对话框
                          Qt.WindowStaysOnTopHint               # 窗口始终处于顶层位置(QQ登录界面)
                          Qt.WindowStaysOnBottomHint            # 窗口始终处于底层位置
    
    获取窗口样式:windowFlags()
    
  • 窗口标志样图

    • Qt.Widget:默认。是一个窗口或者控件。
    • Qt.Window:是一个窗口,有窗口边框和标题栏(图标、标题、最小化、最大化、关闭)
    • Qt.Dialog:是一个对话框窗口,有窗口边框和标题栏(图标、标题、问号、关闭)
    • Qt.Sheet:是一个窗口或部件Macintosh表单
    • Qt.Drawer:是一个窗口或部件Macintosh抽屉
    • Qt.Popup:是一个弹出式顶层窗口,没有窗口边框和标题栏
    • Qt.Tool:是一个工具窗口
    • Qt.ToolTip:是一个提示窗口,没有标题栏和窗口边框
    • Qt.SplashScreen:是一个欢迎窗口,是QSplashScreen构造函数的默认值
    • Qt.SubWindow:是一个子窗口
  • 顶层窗口外观标志

    • Qt.MSWindowsFixedSizeDialogHint:窗口无法调整大小
    • Qt.FramelessWindowHint:窗口无边框
    • Qt.CustomizeWindowHint:有边框但无标题栏和按钮,不能移动和拖动
    • Qt.WindowTitleHint:添加标题栏和一个不可用的关闭按钮
    • Qt.WindowSystemMenuHint:添加系统目录和一个不可用的关闭按钮
    • Qt.WindowMaximizeButtonHint:激活最大化,禁止最小化按钮和关闭按钮
    • Qt.WindowMinimizeButtonHint:激活最小化,禁止最大化按钮和关闭按钮
    • Qt.WindowMinMaxButtonsHint:激活最小化和最大化,禁止关闭按钮
    • Qt.WindowCloseButtonHint:添加一个关闭按钮
    • Qt.WindowContextHelpButtonHint:添加问号和不可用关闭按钮,同对话框
    • Qt.WindowStaysOnTopHint:窗口始终处于顶层位置(QQ登录界面)
    • Qt.WindowStaysOnBottomHint:窗口始终处于底层位置

  • 1~5 示例
    from PyQt5.Qt import *
    import sys
    
    app = QApplication(sys.argv)
    window = QWidget()
    window.resize(500, 500)
    
    w1 = QWidget()
    w1.setWindowTitle('W1')
    
    w2 = QWidget()
    w2.setWindowTitle('W2')
    
    # 设置窗口图标
    img1 = "./images/logo1.jpg"
    img2 = "./images/logo2.png"
    img3 = "./images/logo3.ico"
    
    # 创建QIcon对象,传入图片地址
    icon = QIcon(img3)
    # 设置窗口图标
    window.setWindowIcon(icon)
    # 获取窗口图标
    print('windowIcon:',window.windowIcon())
    
    # 设置窗口标题
    window.setWindowTitle('窗口特定操作1')
    # 获取窗口标题
    print('windowTitle:',window.windowTitle())
    
    # 设置窗口不透明度(0.0 ~ 1.0)
    window.setWindowOpacity(0.8)
    # 获取窗口不透明度
    print('windowOpacity:',window.windowOpacity())
    
    # w1.show()
    # w2.show()
    # window.show()
    
    # 设置窗口状态
    # window.setWindowState(Qt.WindowMaximized)   # 窗口最大化
    # window.setWindowState(Qt.WindowMinimized)   # 窗口最小化
    # window.setWindowState(Qt.WindowNoState)     # 窗口无状态(正常大小)
    # window.setWindowState(Qt.WindowFullScreen)  # 窗口全屏(没有边框)Alt+F4可以关闭
    # w2.setWindowState(Qt.WindowActive)          # 激活当前窗口(选中当前窗口)
    # 获取窗口当前状态
    print('获取窗口状态1:',window.windowState() == Qt.WindowMaximized)
    
    # 窗口显示状态
    # window.showNormal()     # 标准大小显示窗口
    window.showMaximized()  # 最大化显示窗口
    # window.showMinimized()  # 最小化显示窗口
    # window.showFullScreen() # 全屏显示窗口
    
    # 判断窗口状态
    if window.isMaximized():
        print('最大化显示窗口')
    elif window.isMinimized():
        print('最小化显示窗口')
    elif window.isFullScreen():
        print('全屏显示窗口')
    else:
        print('标准大小显示窗口')
    
    print('获取窗口状态2:',window.windowState() == Qt.WindowMaximized)
    
    sys.exit(app.exec_())
    
  • 输出结果
    windowIcon: <PyQt5.QtGui.QIcon object at 0x0000017FEDFEC5E0>
    windowTitle: 窗口特定操作1
    windowOpacity: 0.8
    获取窗口状态1: False
    最大化显示窗口
    获取窗口状态2: True
    
  • 窗口标志示例
    from PyQt5.Qt import *
    import sys
    
    app = QApplication(sys.argv)
    window = QWidget()
    window.resize(800, 300)
    str = 'Qt.WindowStaysOnBottomHint'
    window.setWindowTitle(str)
    
    label = QLabel(window)
    label.setStyleSheet('font-size:40px;')
    label.move(10, 100)
    label.setText(str)
    
    # 窗口样式
    window.setWindowFlags(Qt.Widget)                             # 默认。是一个窗口或者控件。
    # window.setWindowFlags(Qt.Window)                             # 是一个窗口,有窗口边框和标题栏(图标、标题、最小化、最大化、关闭)
    # window.setWindowFlags(Qt.Dialog)                             # 是一个对话框窗口,有窗口边框和标题栏(图标、标题、问号、关闭)
    # window.setWindowFlags(Qt.Sheet)                              # 是一个窗口或部件Macintosh表单
    # window.setWindowFlags(Qt.Drawer)                             # 是一个窗口或部件Macintosh抽屉
    # window.setWindowFlags(Qt.Popup)                              # 是一个弹出式顶层窗口
    # window.setWindowFlags(Qt.Tool)                               # 是一个工具窗口
    # window.setWindowFlags(Qt.ToolTip)                            # 是一个提示窗口,没有标题栏和窗口边框
    # window.setWindowFlags(Qt.SplashScreen)                       # 是一个欢迎窗口,是QSplashScreen构造函数的默认值
    # window.setWindowFlags(Qt.SubWindow)                          # 是一个子窗口
    
    # 顶层窗口外观标志
    # window.setWindowFlags(Qt.MSWindowsFixedSizeDialogHint)       # 窗口无法调整大小
    # window.setWindowFlags(Qt.FramelessWindowHint)                # 窗口无边框
    # window.setWindowFlags(Qt.CustomizeWindowHint)                # 有边框但无标题栏和按钮,不能移动和拖动。
    # window.setWindowFlags(Qt.WindowTitleHint)                    # 添加标题栏和一个不可用的关闭按钮
    # window.setWindowFlags(Qt.WindowSystemMenuHint)               # 添加系统目录和一个不可用的关闭按钮
    # window.setWindowFlags(Qt.WindowMaximizeButtonHint)           # 激活最大化,禁止最小化按钮和关闭按钮
    # window.setWindowFlags(Qt.WindowMinimizeButtonHint)           # 激活最小化,禁止最大化按钮和关闭按钮
    # window.setWindowFlags(Qt.WindowMinMaxButtonsHint)            # 激活最小化和最大化,禁止关闭按钮
    # window.setWindowFlags(Qt.WindowCloseButtonHint)              # 添加一个关闭按钮
    # window.setWindowFlags(Qt.WindowContextHelpButtonHint)        # 添加问号和不可用关闭按钮,同对话框
    # window.setWindowFlags(Qt.WindowStaysOnTopHint)               # 窗口始终处于顶层位置(QQ登录界面)
    # window.setWindowFlags(Qt.WindowStaysOnBottomHint)            # 窗口始终处于底层位置
    
    window.show()
    sys.exit(app.exec_())
    
    

  • 案例:创建一个窗口
  • 要求:
    • 窗口无边框无标题栏
    • 窗口半透明
    • 自定义最小化、最大化、关闭按钮
    • 支持拖拽用户区域移动窗口
  • 代码1(面向过程的思路)
    from PyQt5.Qt import *
    import sys
    
    class MyWidge(QWidget):
        def __init__(self):
            super().__init__()
            self.flag = False
    
        def mousePressEvent(self, a0: QMouseEvent) -> None:
            if a0.button() == Qt.LeftButton:
                self.flag = True
                self.mous_x = a0.x()
                self.mous_y = a0.y()
    
        def mouseMoveEvent(self, a0: QMouseEvent) -> None:
            if self.flag:
                move_x = a0.x() - self.mous_x
                move_y = a0.y() - self.mous_y
    
                self.move(self.x() + move_x, self.y() + move_y)
    
        def mouseReleaseEvent(self, a0: QMouseEvent) -> None:
            self.flag = False
    
    app = QApplication(sys.argv)
    window = MyWidge()
    window.resize(500, 500)
    window.setWindowTitle('窗口特定操作案例')
    
    # 设置窗口无边框、标题栏
    window.setWindowFlags(Qt.FramelessWindowHint)
    
    # 设置窗口透明度
    window.setWindowOpacity(0.8)
    
    # 添加最小、最大、关闭按钮
    btn_li = ['关闭', '最大化', '最小化']
    btn_w = 80
    btn_h = 40
    top_h = 1
    
    btn_close = QPushButton(window)
    btn_close.resize(btn_w, btn_h)
    btn_close.setText('关闭')
    
    btn_max = QPushButton(window)
    btn_max.resize(btn_w, btn_h)
    btn_max.setText('最大化')
    
    btn_min = QPushButton(window)
    btn_min.resize(btn_w, btn_h)
    btn_min.setText('最小化')
    
    # 添加按钮移动方法
    def btn_move():
        btn_close_x = window.width() - btn_w
        btn_close.move(btn_close_x, top_h)
    
        btn_max_x = btn_close_x - btn_w
        btn_max.move(btn_max_x, top_h)
    
        btn_min_x = btn_max_x - btn_w
        btn_min.move(btn_min_x, top_h)
    
    # 调用移动方法,统一移动按钮
    btn_move()
    
    # 添加最大化按钮槽函数,根据窗口状态设置按钮操作
    def max_normal():
        if window.isMaximized():
            window.showNormal()
            btn_move()
            btn_max.setText('最大化')
        else:
            window.showMaximized()
            btn_move()
            btn_max.setText('恢复')
    
    # 给三个按钮的点击事件连接槽函数
    btn_close.pressed.connect(window.close)
    btn_max.pressed.connect(max_normal)
    btn_min.pressed.connect(window.showMinimized)
    
    window.show()
    sys.exit(app.exec_())
    
  • 代码2(面向对象的思路)
# 案例:创建一个窗口
# 要求:
    # 窗口无边框无标题栏
    # 窗口半透明
    # 自定义最小化、最大化、关闭按钮
    # 支持拖拽用户区域移动窗口

from PyQt5.Qt import *
import sys

class MyWidge(QWidget):
    def __init__(self):
        super().__init__()
        self.flag = False
        self.resize(500, 500)
        self.setWindowTitle('窗口特定操作案例')
        # 设置窗口无边框、标题栏
        self.setWindowFlags(Qt.FramelessWindowHint)
        # 设置窗口透明度
        self.setWindowOpacity(0.8)
        self.func_add()

    def func_add(self):
        self.add_widge()
        self.btn_move()
        self.btn_xinh()

    def add_widge(self):
        # 添加最小、最大、关闭按钮
        self.btn_w = 80
        self.btn_h = 40
        self.top_h = 1

        btn_close = QPushButton(self)
        self.btn_close = btn_close
        btn_close.resize(self.btn_w, self.btn_h)
        btn_close.setText('关闭')

        btn_max = QPushButton(self)
        self.btn_max = btn_max
        btn_max.resize(self.btn_w, self.btn_h)
        btn_max.setText('最大化')

        btn_min = QPushButton(self)
        self.btn_min = btn_min
        btn_min.resize(self.btn_w, self.btn_h)
        btn_min.setText('最小化')

        # 添加按钮移动方法
    def btn_move(self):
        btn_close_x = self.width() - self.btn_w
        self.btn_close.move(btn_close_x, self.top_h)

        btn_max_x = btn_close_x - self.btn_w
        self.btn_max.move(btn_max_x, self.top_h)

        btn_min_x = btn_max_x - self.btn_w
        self.btn_min.move(btn_min_x, self.top_h)

    def btn_xinh(self):
        # 添加最大化按钮槽函数,根据窗口状态设置按钮操作
        def max_normal():
            if self.isMaximized():
                self.showNormal()
                self.btn_move()
                self.btn_max.setText('最大化')
            else:
                self.showMaximized()
                self.btn_move()
                self.btn_max.setText('恢复')

        # 给三个按钮的点击事件连接槽函数
        self.btn_close.pressed.connect(self.close)
        self.btn_max.pressed.connect(max_normal)
        self.btn_min.pressed.connect(self.showMinimized)

    def mousePressEvent(self, a0: QMouseEvent) -> None:
        if a0.button() == Qt.LeftButton:
            self.flag = True
            self.mous_x = a0.x()
            self.mous_y = a0.y()

    def mouseMoveEvent(self, a0: QMouseEvent) -> None:
        if self.flag:
            move_x = a0.x() - self.mous_x
            move_y = a0.y() - self.mous_y

            self.move(self.x() + move_x, self.y() + move_y)

    def mouseReleaseEvent(self, a0: QMouseEvent) -> None:
        self.flag = False

app = QApplication(sys.argv)
window = MyWidge()

window.show()
sys.exit(app.exec_())
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
import sys import threading import time from PyQt5.QtWidgets import * from PyQt5 import uic import pandas as pd import random # import pyqtgraph as pg import matplotlib.pyplot as plt from PyQt5.QtWidgets import QGroupBox from PyQt5 import QtWidgets from login_4 import Ui_CK from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas # df = pd.read_excel('shu.xlsx') class MyWindow(QWidget and QMainWindow,Ui_CK): def __init__(self): super().__init__() self.init_ui() groupbox = QGroupBox('Title',self) # self.plot = pg.PlotWidget(enableAutoRange=True) # self.ui.verticalLayout.addWidget(self.plot) # self.curve = self.plot.plot() #self.ui = uic.loadUi("./login_4.ui") def init_ui(self): print('1.1') try: self.ui = uic.loadUi("./login_4.ui") #print(threading.current_thread()) #print(self.ui.__dict__) # print(self.ui.label) # print(self.ui.label.text()) # 查看ui文件中有哪些控件 # 提取要操作的控件 self.user_name_qwidget = self.ui.lineEdit # 单位输入框 self.password_qwidget = self.ui.lineEdit_2 # 二级单位输入框 self.zhicheng_qwidget = self.ui.lineEdit_3 # 职称输入框 self.jiaoyuan_qwidget = self.ui.lineEdit_4 # 教员输入框 self.login_btn = self.ui.pushButton # 登录抽课按钮 self.textBrowser = self.ui.textBrowser # 授课对象显示区域 # 绑定信号与槽函数 self.textBrowser_2 = self.ui.textBrowser_2 # 文本显示区域课程名称 self.textBrowser_3 = self.ui.textBrowser_3 # 文本显示区域课次 self.textBrowser_4 = self.ui.textBrowser_4 # 文本显示区域教研室 self.login_btn.clicked.connect(self.login) self.login_btna = self.ui.pushButton_2 self.login_btna.clicked.connect(lambda: self.plot_q()) except Exception as e: print(e.__class__.__name__, e) def login(self): print('1.2') """登录按钮的槽函数""" #print(self.user_name_qwidget.text()) a = self.user_name_qwidget.text() e = sel 为什么会报错
03-24

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失心疯_2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值