07pyqt-QWidget

QWidget

QWidget是pyqt中所有可视化控件的基类

QWidget创建.py

import sys
from PyQt5.Qt import *

# Qwidget是所有可视控件的基类

app = QApplication(sys.argv)

win = QWidget()
win.show()

sys.exit(app.exec_())

Qwidget位置api.py

import sys
from PyQt5.Qt import *

# Qwidget是所有可视控件的基类

app = QApplication(sys.argv)

win = QWidget()
# move移动窗口相对桌面位置
win.move(100, 100)
# 设置窗口大小
win.resize(200, 200)

# 调整窗口大小
# win.setGeometry(x, y, width, height)
# 根据内容自适应大小
# win.adjustSize()
# 设置固定尺寸
# win.setFixedSize()

win.show()
sys.exit(app.exec_())

Qwidget尺寸信息.py

import sys
from PyQt5.Qt import *

# Qwidget是所有可视控件的基类

app = QApplication(sys.argv)

win = QWidget()
win.move(100, 100)
win.resize(200, 200)

# 控件显示之前
print('x', win.x())
print('y', win.y())
print('pos', win.pos())
print('width', win.width())
print('height', win.height())
print('size', win.size())
print('geometry', win.geometry())
print('rect', win.rect())
print('frameSize', win.frameSize())
print('frameGeometry', win.frameGeometry())

win.show()

# 控件显示之后
print('-' * 100)
print('x', win.x())
print('y', win.y())
print('pos', win.pos())
print('width', win.width())
print('height', win.height())
print('size', win.size())
print('geometry', win.geometry())
print('rect', win.rect())
print('frameSize', win.frameSize())
print('frameGeometry', win.frameGeometry())

sys.exit(app.exec_())

QWidget最大最小尺寸.py

import sys
from PyQt5.Qt import *


# 获取最大最小尺寸api
# minimumWidth()
# minimumHeight()
# minimumSize()
# maximumWidth()
# maximumHeight()
# maximumSize()

# 设置最大最小尺寸api
# setMinimumWidth()
# setMinimumHeight()
# setMinimumSize()
# setMaximumWidth()
# setMaximumHeight()
# setMaximumSize()

class Window(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.setMinimumSize(300, 300)
        self.setMaximumSize(500, 500)
        self.do_something()

    def do_something(self):
        pass


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())

QWidget内容边距.py

import sys
from PyQt5.Qt import *


# setContentsMargins() 设置内容边距(左,上,右,下)
# getContentsMargins() 获取内容边距
# contentsRect()       获取内容区域
class Window(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.do_something()

    def do_something(self):
        label = QLabel(self)
        label.setText('hello world')
        label.resize(300, 300)
        label.setStyleSheet('background-color: cyan;border: 1px solid;')
        label.setContentsMargins(100, 100, 100, 100)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())

QWidget鼠标操作.py

import sys
from PyQt5.Qt import *


# setCursor()设置鼠标形状
# unsetCursor()重置鼠标形状
class Window(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.do_something()

    def do_something(self):
        pass

    # 该事件在鼠标左键按下且移动后触发
    def mouseMoveEvent(self, evt):
        print('mouseMoveEvent', evt.localPos())


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Window()
    # win.setCursor(Qt.BusyCursor)

    # 通过图片自定义鼠标形状
    # pixmap = QPixmap('./QQ截图20220324145321.png')
    # pixmap = pixmap.scaled(10, 10)
    # cursor = QCursor(pixmap, 0, 0)
    # win.setCursor(cursor)

    # 设置鼠标位置
    # current_cursor = win.cursor()
    # print(current_cursor.pos())
    # current_cursor.setPos(0, 0)

    # 设置MouseTracking后,不需要点击左键,移动即可触发mouseMoveEvent事件
    print(win.hasMouseTracking())
    win.setMouseTracking(True)

    win.show()
    sys.exit(app.exec_())

QWidget焦点控制.py

import sys
from PyQt5.Qt import *


class Window(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.do_something()

    def do_something(self):
        pass

    def mousePressEvent(self, evt):
        self.focusNextChild()
        # self.focusPreviousChild()
        # self.focusNextPrevChild(True)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Window()

    le1 = QLineEdit(win)
    le2 = QLineEdit(win)
    le3 = QLineEdit(win)
    le4 = QLineEdit(win)

    le1.move(50, 50)
    le2.move(50, 100)
    le3.move(50, 150)
    le4.move(50, 200)

    # le2.setFocus()
    # le2.setFocusPolicy(Qt.TabFocus)
    # le2.setFocusPolicy(Qt.ClickFocus)
    le2.setFocusPolicy(Qt.NoFocus)
    le2.clearFocus()

    win.show()

    sys.exit(app.exec_())

QWidget事件操作.py

import sys
from PyQt5.Qt import *


# https://www.bilibili.com/video/BV1iD4y1D7C8?p=43

class Window(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.do_something()

    def do_something(self):
        pass

    # 创建和缩小之后展示都会触发
    def showEvent(self, evt):
        print('窗口展示')

    def closeEvent(self, evt):
        print('窗口关闭')

    def moveEvent(self, evt):
        print('窗口移动')

    def resizeEvent(self, evt):
        print('size 改变')

    def enterEvent(self, evt):
        print('鼠标进入')

    def leaveEvent(self, evt):
        print('鼠标离开')

    def mousePressEvent(self, evt):
        print('鼠标按下')

    def mouseReleaseEvent(self, evt):
        print('鼠标释放')

    def mouseDoubleClickEvent(self, evt):
        print('鼠标双击')

    def mouseMoveEvent(self, evt):
        print('鼠标移动')

    def keyPressEvent(self, evt):
        print('键位按下')

    def keyReleaseEvent(self, evt):
        print('键位释放')

    def focusInEvent(self, evt):
        print('获取焦点')

    def focusOutEvent(self, evt):
        print('失去焦点')

    def dragEnterEvent(self, evt):
        print('拖拽进入控件')

    def dragLeaveEvent(self, evt):
        print('拖拽离开控件')

    def dragMoveEvent(self, evt):
        print('拖拽在控件内移动')

    def dropEvent(self, evt):
        print('拖拽放下时调用')

    def paintEvent(self, evt):
        print('绘制事件')

    def changeEvent(self, evt):
        print('窗体改变、字体改变调用')

    def contextMenuEvent(self, evt):
        print('右键菜单调用')

    def inputMethodEvent(self, evt):
        print('输入法调用')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())

QWidget事件转发机制.py

import sys
from PyQt5.Qt import *


class Window(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.resize(500, 500)
        self.do_something()

    def do_something(self):
        pass

    def mousePressEvent(self, evt):
        print('顶层窗口按下')


class MidWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.resize(200, 200)
        self.do_something()

    def do_something(self):
        self.setAttribute(Qt.WA_StyledBackground, True)
        self.setStyleSheet('border:1px solid;')

    def mousePressEvent(self, evt):
        print('中层窗口按下')
        # evt.accept() 接收事件不在向父类传递
        # evt.ignore() 忽略事件继续向父类传递
        # print(evt.isAccepted()) 判断是否接收事件


if __name__ == '__main__':
    app = QApplication(sys.argv)

    win = Window()
    mid_win = MidWindow(win)
    win.show()

    sys.exit(app.exec_())

QWidget层级关系.py

import sys
from PyQt5.Qt import *


class Window(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.resize(500, 500)
        self.do_something()

    def do_something(self):
        pass


class Lable(QLabel):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.do_something()

    def do_something(self):
        pass

    def mousePressEvent(self, evt):
        self.raise_()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Window()

    label1 = Lable(win)
    label2 = Lable(win)

    label1.setText('label1')
    label2.setText('label2')

    label1.resize(100, 100)
    label2.resize(100, 100)
    label2.move(50, 50)

    label1.setStyleSheet('background-color: cyan;')
    label2.setStyleSheet('background-color: green;')

    # # 把对象降至最下层
    # label2.lower()
    # # 把对象升至最上层
    # label1.raise_()

    # 把label2放置于label1下
    label2.stackUnder(label1)

    win.show()
    sys.exit(app.exec_())

QWidget窗口特定操作.py

import sys
from PyQt5.Qt import *

if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = QWidget()

    # 设置图标
    icon = QIcon('./QQ截图20220324145321.png')
    win.setWindowIcon(icon)

    # 设置\获取标题
    win.setWindowTitle('window')
    print(win.windowTitle())

    # 设置\获取透明度
    win.setWindowOpacity(0.5)
    print(win.windowOpacity())

    # 设置\获取窗口状态。
    # Qt.WindowNoState 无状态
    # Qt.WindowMinimized 最小化
    # Qt.WindowMaximized 最大化
    # Qt.WindowFullScreen 全屏
    # Qt.WindowActive 活动窗口
    # win.setWindowState()
    print(win.windowState())

    # win.showMaximized()
    # win.showMinimized()
    # win.showFullScreen()
    # win.showNormal()
    # win.isMinimized()
    # win.isMaximized()
    # win.isFullScreen()

    win.show()
    sys.exit(app.exec_())

QWidget控件交互.py

import sys
from PyQt5.Qt import *


class Window(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.do_something()

    def do_something(self):
        pass


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Window()

    btn = QPushButton(win)
    btn.setText('点击')
    btn.pressed.connect(lambda: btn.hide())

    # 设置按钮不可被点击
    # btn.setEnabled(False)
    # print(btn.isEnabled())

    # btn.show()
    # btn.hide()
    # btn.setVisible(False)
    # btn.setHidden(True)

    # isVisible最终是否可见,isHidden对于父控件来说是否隐藏
    # print(btn.isVisible())
    # print(btn.isHidden())

    # 设置窗口编辑状态
    # win.setWindowTitle('交互状态[*]')
    # win.setWindowModified(True)
    # print(win.isWindowModified())

    win.show()

    win2 = Window()
    win2.show()
    print(win2.isActiveWindow())

    sys.exit(app.exec_())

案例

pyqt-案例01-设置尺寸.py

import sys
from PyQt5.Qt import *


class Window(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.move(300, 300)
        self.resize(500, 500)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())

pyqt-案例02-九宫格摆放.py

import sys
from PyQt5.Qt import *


class Window(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.move(300, 300)
        self.resize(500, 500)
        self.do_something()

    def do_something(self):

        width = self.width() / 3
        height = self.height() / 3
        for i in range(0, 3):
            for j in range(0, 3):
                label = QLabel(self)
                label.setText(f'第{(i + 1) * (j + 1)}个控件')
                label.move(i * width, j * height)
                label.resize(width, height)
                label.setStyleSheet('border: 1px solid')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())

pyqt-案例03-鼠标跟随.py

import sys
from PyQt5.Qt import *


class Window(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.resize(500, 500)
        self.do_something()

    def do_something(self):
        self.label = QLabel(self)
        self.label.setStyleSheet('background-color: cyan')
        self.label.resize(100, 100)

    def mouseMoveEvent(self, evt):
        self.label.move(evt.localPos().x(), evt.localPos().y())


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())

pyqt-案例04-鼠标进入移出.py

import sys
from PyQt5.Qt import *


class Window(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.resize(500, 500)
        self.do_something()

    def do_something(self):
        pass


class Lable(QLabel):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.do_something()

    def do_something(self):
        pass

    def enterEvent(self, evt):
        self.setText('欢迎光临')

    def leaveEvent(self, evt):
        self.setText('谢谢惠顾')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Window()

    label = Lable(win)
    label.resize(200, 200)
    label.setStyleSheet('background-color: cyan;')

    win.show()
    sys.exit(app.exec_())

pyqt-案例05-监听键盘按键.py

import sys
from PyQt5.Qt import *


class Window(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.resize(500, 500)
        self.do_something()

    def do_something(self):
        pass


class Lable(QLabel):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.do_something()

    def do_something(self):
        pass

    def keyPressEvent(self, evt):
        print(evt)
        if evt.key() == Qt.Key_A:
            print('a被点击了')
        if evt.modifiers() == Qt.ControlModifier and evt.key() == Qt.Key_S:
            print('ctrl+S被点击')
        if evt.modifiers() == Qt.ShiftModifier | Qt.AltModifier and evt.key() == Qt.Key_S:
            print('shift+alt+S被点击')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Window()

    label = Lable(win)
    label.resize(200, 200)
    label.setStyleSheet('background-color: cyan;')
    # grabKeyboard开启之后label会监听键盘输入
    label.grabKeyboard()

    win.show()
    sys.exit(app.exec_())

pyqt-案例06-用户区拖动窗口.py

import sys
from PyQt5.Qt import *


class Window(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.resize(500, 500)
        self.move_flag = False
        self.do_something()

    def do_something(self):
        pass

    def mousePressEvent(self, evt):
        if evt.button() == Qt.LeftButton:
            self.move_flag = True
            self.mouse_x = evt.globalX()
            self.mouse_y = evt.globalY()
            self.origin_x = self.x()
            self.origin_y = self.y()

    def mouseReleaseEvent(self, evt):
        if evt.button() == Qt.LeftButton:
            self.move_flag = False

    def mouseMoveEvent(self, evt):
        if self.move_flag:
            self.move(self.origin_x + evt.globalX() - self.mouse_x, self.origin_y + evt.globalY() - self.mouse_y)
            self.mouse_x = evt.globalX()
            self.mouse_y = evt.globalY()
            self.origin_x = self.x()
            self.origin_y = self.y()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Window()
    win.setMouseTracking(True)
    win.show()
    sys.exit(app.exec_())

pyqt-案例07-父子关系扩充.py

import sys
from PyQt5.Qt import *


class Window(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.resize(500, 500)
        self.do_something()

    def do_something(self):
        pass

    def mousePressEvent(self, evt):
        local_x = evt.x()
        local_y = evt.y()
        sub_widget = self.childAt(local_x, local_y)
        if sub_widget is not None:
            sub_widget.setStyleSheet('background-color:red;')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Window()

    for i in range(0, 3):
        label = QLabel(win)
        label.setText(f'第{i + 1}个控件')
        label.move(100 * i, 100 * i)

    win.show()
    sys.exit(app.exec_())

pyqt-案例08-边框设置.py

import sys
from PyQt5.Qt import *


class Window(QWidget):
    def __init__(self, *args, **kwargs):
        super(Window, self).__init__(*args, **kwargs)
        self.setWindowFlags(Qt.FramelessWindowHint)
        self.setWindowOpacity(0.8)
        self.resize(500, 500)
        self.move_flag = False
        self.do_something()

    def do_something(self):
        self.btn_width = 50
        self.btn_height = 20

        self.closeBtn = QPushButton(self)
        self.miniBtn = QPushButton(self)
        self.maxBtn = QPushButton(self)

        self.closeBtn.setText('关闭')
        self.miniBtn.setText('最小化')
        self.maxBtn.setText('最大化')

        self.closeBtn.resize(self.btn_width, self.btn_height)
        self.miniBtn.resize(self.btn_width, self.btn_height)
        self.maxBtn.resize(self.btn_width, self.btn_height)

        def max_normal():
            print(self.isMaximized())
            if self.isMaximized():
                self.showNormal()
                self.maxBtn.setText('最大化')
            else:
                self.showMaximized()
                self.maxBtn.setText('恢复')

        self.closeBtn.pressed.connect(self.close)
        self.miniBtn.pressed.connect(self.showMinimized)
        self.maxBtn.pressed.connect(max_normal)

    def resizeEvent(self, evt):
        self.closeBtn.move(self.width() - self.btn_width, 0)
        self.maxBtn.move(self.width() - self.btn_width * 2, 0)
        self.miniBtn.move(self.width() - self.btn_width * 3, 0)

    def mousePressEvent(self, evt):
        if evt.button() == Qt.LeftButton:
            self.move_flag = True
            self.mouse_x = evt.globalX()
            self.mouse_y = evt.globalY()
            self.origin_x = self.x()
            self.origin_y = self.y()

    def mouseReleaseEvent(self, evt):
        if evt.button() == Qt.LeftButton:
            self.move_flag = False

    def mouseMoveEvent(self, evt):
        if self.move_flag:
            self.move(self.origin_x + evt.globalX() - self.mouse_x, self.origin_y + evt.globalY() - self.mouse_y)
            self.mouse_x = evt.globalX()
            self.mouse_y = evt.globalY()
            self.origin_x = self.x()
            self.origin_y = self.y()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    # win = QWidget(flags=Qt.FramelessWindowHint)
    win = Window()

    win.show()
    sys.exit(app.exec_())

pyqt-案例09-控件交互.py

import sys
from PyQt5.Qt import *


class Window(QWidget):
    def __init__(self, *args, **kwargs):
        super(Window, self).__init__(*args, **kwargs)
        self.resize(500, 500)
        self.do_something()

    def do_something(self):
        label = QLabel(self)
        text = QLineEdit(self)
        btn = QPushButton(self)

        btn.setText('点击')
        btn.setEnabled(False)

        label.setText('label')
        label.hide()

        def text_change(t):
            print(t)
            if len(t) > 0:
                btn.setEnabled(True)
            else:
                btn.setEnabled(False)

        text.textChanged.connect(text_change)

        def btn_pressed():
            if text.text() == 'uu':
                label.show()
                label.setText('success')
            else:
                label.show()
                label.setText('fail')

        btn.pressed.connect(btn_pressed)

        label.move(50, 50)
        text.move(50, 100)
        btn.move(50, 150)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Window()

    win.show()
    sys.exit(app.exec_())

pyqt-案例10-状态栏.py

import sys
from PyQt5.Qt import *


class Window(QWidget):
    def __init__(self, *args, **kwargs):
        super(Window, self).__init__(*args, **kwargs)
        self.resize(500, 500)
        self.do_something()

    def do_something(self):
        pass


if __name__ == '__main__':
    app = QApplication(sys.argv)
    # win = Window()
    win = QMainWindow()
    win.statusBar()
    win.setStatusTip('这是窗口')

    label = QLabel(win)
    label.setText('标签')
    label.setStatusTip('这是标签')
    label.setToolTip('这是提示标签')
    label.setToolTipDuration(2000)

    win.show()

    sys.exit(app.exec_())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值