PyQ5 day2

2023-11-25 11:40
文章标签 day2 pyq5

本文主要是介绍PyQ5 day2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、主窗口的主要类型
    • 1.QMainWindow
    • 2.QDialog
    • 3.QWidegt
    • 4、用代码创建的第一个主窗口
  • 二、使窗口居中
  • 三、退出主应用程序
  • 四、获得窗口坐标系
  • 五、设置应用程序及窗口图标
  • 六,给窗口或者控件添加提示信息
  • 七 、Qlable控件
    • 1、常用方法
    • 2、QLabel 常用信号
    • 3.实例Ⅰ
  • 八、动态加载文件
    • 方法一 动态加载
    • 方法二 转化为python文件再导入
    • 两者比较
  • 九、页面布局建议:
  • 十、发布程序
  • 十一、QLineEdit 控件与其回显模式
    • 1、共四种回显模式
    • 2、一个小案例
  • 总结:


前言

今天终于开始代码的编写啦~继续加油


一、主窗口的主要类型

1.QMainWindow

有菜单栏,工具栏和状态栏,是最常用的窗口格式

2.QDialog

是对话窗口的基类,没有菜单栏,工具栏和状态栏。(有模态和非模态)

3.QWidegt

当不确定窗口用途时,就使用这个类型

4、用代码创建的第一个主窗口

# 时间:2022/10/31 21:50
# cky
from PyQt5.QtWidgets import QApplication,QMainWindow
import sys
from PyQt5.QtGui import QIcon#创建一个类继承QMainWindow
class FirstMinWin(QMainWindow):#重写构造类的方法def __init__(self):#复用父类构造方法'''如果重写了__init__时,要继承父类的构造方法,可以使用super关键字:super(子类,self).__init__(参数1,参数2,....)也可以写成:super().__init(参数) py3.xx支持,py2.xx不支持'''super(FirstMinWin, self).__init__()self.setWindowTitle('第一个窗口')self.resize(400,300)#设置了一个状态框self.status=self.statusBar()#设置状态框内容self.status.showMessage('只存在的5秒消息',5000)if __name__ == '__main__':#实例化一个appapp=QApplication(sys.argv)#设置图标app.setWindowIcon(QIcon('./image/blackwhite.jpg'))#实例化FirstMinwin类ui=FirstMinWin()#显示窗口ui.show()#进入主程序以及安全退出sys.exit(app.exec())

在这里插入图片描述

二、使窗口居中

现在使用QApplication.primaryScreen().geometry()来获取屏幕信息

代码如下(示例):

# 时间:2022/11/1 9:17
# cky
from PyQt5.QtWidgets import QApplication,QMainWindow
import sys
from PyQt5.QtGui import QIcon#创建一个类继承QMainWindow
class CenterForm(QMainWindow):#重写构造类的方法def __init__(self):super(CenterForm, self).__init__()self.setWindowTitle('第一个窗口')self.resize(680,450)#定义使窗口居中的函数def center(self):#获得屏幕的物理大小screen=QApplication.primaryScreen().geometry()#获得窗口大小win=self.geometry()self.left=(screen.width()-win.width())/2self.top=(screen.height()-win.height())/2#移动窗口的左上角的X,Y坐标,使窗口居中self.move(self.left,self.top)
if __name__ == '__main__':#实例化一个appapp=QApplication(sys.argv)#设置图标app.setWindowIcon(QIcon('./image/blackwhite.jpg'))#实例化FirstMinwin类ui=CenterForm()#调用居中函数ui.center()#显示窗口ui.show()#进入主程序以及安全退出sys.exit(app.exec())

三、退出主应用程序

使用代码实现,而没有用designer的信号与槽来手动绑定
# 时间:2022/11/1 10:19
# cky
from PyQt5.QtWidgets import QApplication,QMainWindow,QPushButton,QHBoxLayout,QWidget
import sys
from PyQt5.QtGui import QIconclass ExitApp(QMainWindow):def __init__(self):super(ExitApp, self).__init__()self.resize(400,400)#实例化一个按钮,并在按钮上添加时内容self.btn=QPushButton('关闭应用程序')#实例化一个布局layout=QHBoxLayout()#在布局上添加上按钮layout.addWidget(self.btn)#将按钮的单击事件与方法关联起来,注意closeapp没有括号self.btn.clicked.connect(self.closeapp)#添加一个窗口,这里也不太明白,老师说一般都是这样mainframe=QWidget()#将布局添加到这个窗口上mainframe.setLayout(layout)#再将这个窗口添加到主窗口上self.setCentralWidget(mainframe)#槽,即与关闭按钮绑定在一起def closeapp(self):#获得触发事件sender=self.sender()print(sender.text()+'按钮被按下')#获得当前程序的实例进行关闭app=QApplication.instance()app.exit()
if __name__ == '__main__':#实例化一个appapp=QApplication(sys.argv)#设置图标app.setWindowIcon(QIcon('./image/blackwhite.jpg'))#实例化FirstMinwin类ui=ExitApp()#显示窗口ui.show()#进入主程序以及安全退出sys.exit(app.exec())

在这里插入图片描述

四、获得窗口坐标系

以下三种方法,获得的窗口坐标系有所不同
# 时间:2022/11/1 10:55
# cky
from PyQt5.QtWidgets import QApplication,QMainWindow,QPushButton,QHBoxLayout,QWidget
import sys
from PyQt5.QtGui import QIcon
def clickme():print("1")print("QWidget.x():%d" % widget.x())  #窗口横坐标print("QWidget.y():%d" %widget.y())  #窗口纵坐标print("QWidget.width():%d" % widget.width())  #工作区宽度print("QWidget.height():%d" % widget.height())  #工作区高度print("2")print("widget.geometry().x():%d" % widget.geometry().x())  #工作区横坐标(工作区离窗口有像素差)print("widget.geometry().y():%d" % widget.geometry().y())  #工作区纵坐标 (工作区离窗口有个菜单栏)print("widget.geometry().width():%d" % widget.geometry().width()) #工作区宽度print("widget.geometry().height():%d" % widget.geometry().height()) #工作区高度print("3")print("widget.frameGeometry().x():%d" % widget.frameGeometry().x())  #窗口横坐标print("widget.frameGeometry().y():%d" % widget.frameGeometry().y())  #窗口纵坐标print("widget.frameGeometry().width():%d" % widget.frameGeometry().width())  #窗口宽度print("widget.frameGeometry().height():%d" % widget.frameGeometry().height())  #窗口高度
app=QApplication(sys.argv)
widget=QWidget()
widget.resize(400,400)**#设置的是工作区大小**
#为btn设置父类
btn=QPushButton(widget)
btn.setText('按钮')
btn.clicked.connect(clickme)
widget.show()
sys.exit(app.exec())

五、设置应用程序及窗口图标

# 时间:2022/11/1 11:23
# cky
from PyQt5.QtWidgets import QApplication,QMainWindow
from PyQt5.QtGui import QIcon
import sys
class Icon(QMainWindow):def __init__(self):super(Icon, self).__init__()self.setWindowTitle("第一个程序")self.resize(400,400)
#windows在窗口上设置图标仍然显示,但mac系统下如果设置窗口图标会不显示
#mac下在应用程序下设置图标才会在应用程序和主窗口上显示,但是如果在窗口上设置了图标
#又在应用程序下设置图标,只会在应用程序上显示而不会在窗口上显示self.setWindowIcon(QIcon('image/1.ico'))#这是在窗口上设置
if __name__ == '__main__':app=QApplication(sys.argv)#这是在应用程序上设置app.setWindowIcon(QIcon('image/1.ico'))win=Icon()win.show()sys.exit(app.exec())

六,给窗口或者控件添加提示信息

# 时间:2022/11/1 14:47
# cky
from PyQt5.QtWidgets import QApplication,QMainWindow,QPushButton,QHBoxLayout,QWidget,QToolTip
import sys
from PyQt5.QtGui import QFontclass Tooltip(QMainWindow):def __init__(self):super().__init__()self.initui()def initui(self):self.resize(400,400)self.setWindowTitle('添加提示信息')#设置提示信息的字体和字号QToolTip.setFont(QFont('SansSerif',12))#给当前窗体加上提示信息self.setToolTip('今天也要加油哦')self.btn=QPushButton('按钮')self.btn.setToolTip('这是一按钮')# 实例化一个布局layout = QHBoxLayout()# 在布局上添加上按钮layout.addWidget(self.btn)# 添加一个窗口,这里也不太明白,老师说一般都是这样mainframe = QWidget()# 将布局添加到这个窗口上mainframe.setLayout(layout)# 再将这个窗口添加到主窗口上self.setCentralWidget(mainframe)if __name__ == '__main__':app=QApplication(sys.argv)win=Tooltip()win.show()sys.exit(app.exec())

效果:
在这里插入图片描述
在这里插入图片描述

七 、Qlable控件

1、常用方法

方法	                描述
setAlignment()	    按固定值方法对齐文本
setIndent()	        设置文本缩进值
setPixmap()        设置QLabel为一个Pixmap图片
text()	           获取 QLabel 的文本内容
setText()          设置 QLabel 的问本内容
selectedText()	   返回所选择的字符
setBuddy()	       设置 QLabel 的助记符及 buddy(伙伴),即使用 QLabel 快捷键,会在快捷键后将焦点设置到其 buddy 上;buddy 可以是任意 widget 控件。使用setBuddy(QWidget*) 设置,其QLabel 必须是文本内容,并且使用“&”符号设置了助记符
setWordWrap()	    设置是否换行

2、QLabel 常用信号

方法        	      描述
linkActivated	   前提是标签设置为超链接,并且不希望打开这个超链接(即setOpenExternalLinks(False))时,点击此链接会触发事件
linkHovered	       前提是标签设置为超链接,当鼠标指针滑过标签中嵌入的超链接时,触发事件

3.实例Ⅰ

# 时间:2022/11/1 15:46
# cky
from PyQt5.QtWidgets import QApplication,QMainWindow,QLabel,QVBoxLayout,QWidget,QToolTip
import sys
from PyQt5.QtGui import QFont,QPalette,QPixmap #调色板,图片
from PyQt5.QtCore import Qt #一些常量class LableDemo(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.resize(600,600)self.setWindowTitle('Lable实例')lable1=QLabel(self)  #括号里设置他的父级是当前窗口lable2=QLabel(self)lable3=QLabel(self)lable4=QLabel(self)lable1.setText("<h2>这是一个标签</h2>")lable1.setAutoFillBackground(True)  # 自动填充颜色 如果不设置,不会显示颜色palette=QPalette() #一个面板palette.setColor(QPalette.Window,Qt.blue) #设置面板颜色lable1.setPalette(palette) #给lable1添加面板对应颜色lable1.setAlignment(Qt.AlignCenter)  #设置对齐方式为居中对齐lable2.setText("<a href='#'>点我登录</a>")lable2.setAlignment(Qt.AlignLeft)#左对齐#绑定鼠标划过lable2时的事件lable2.linkHovered.connect(self.linkhover)lable3.setPixmap(QPixmap("./image/blackwhite.jpg"))#Lable4是一个超链接同时也绑定了一个鼠标触发事件,这两个只能有一个起效,若设置了外部链接为True,则触发事件不会响应#反之同理,默认为Falselable4.setOpenExternalLinks(True)lable4.setText("<a href='https://https://www.baidu.com/'>点我进入百度</a>")lable4.setToolTip('这是一个超链接')lable4.setAlignment(Qt.AlignRight)#绑定鼠标触发lable4时的事件lable4.linkActivated.connect(self.linkActive)layout=QVBoxLayout() #垂直布局layout.addWidget(lable1)layout.addWidget(lable2)layout.addWidget(lable3)layout.addWidget(lable4)self.setLayout(layout)#如果这个类继承自       QMainWindow 则必须添加上一个QWidget到主窗口,否则不会显示# mainframe = QWidget()# # 将布局添加到这个窗口上# mainframe.setLayout(layout)# # 再将这个窗口添加到主窗口上# self.setCentralWidget(mainframe)def linkhover(self):print('鼠标滑过触发事件lable2')def linkActive(self):print('单击触发事件lable4')if __name__ == '__main__':app=QApplication(sys.argv)win=LableDemo()win.show()sys.exit(app.exec())

八、动态加载文件

方法一 动态加载

from PyQt5.QtWidgets import QApplication
class Stats:def __init__(self):# 从文件中加载UI定义self.ui = uic.loadUi("text.ui")
app = QApplication([])
stats = Stats()
stats.ui.show()
app.exec_()

方法二 转化为python文件再导入

from PyQt5.QtWidgets import QApplication,QMainWindow
import buddy
import sys
if __name__ == '__main__':app=QApplication(sys.argv)  newwindow=QMainWindow() #实例化一个QMainWindow()ui=buddy.Ui_MainWindow()  #实例化转为py文件后的类ui.setupUi(newwindow)  #传入一个窗口,使用类中的方法newwindow.show() #显示sys.exit(app.exec_())

两者比较

那么我们该使用哪种方式比较好呢?动态加载还是转化为Python代码?

建议:通常采用动态加载比较方便,因为改动界面后,不需要转化,直接运行,特别方便。

但是,如果 你的程序里面有非qt designer提供的控件, 这时候,需要在代码里面加上一些额外的声明,而且 可能还会有奇怪的问题。往往就 要采用 转化Python代码的方法。

九、页面布局建议:

对界面控件进行布局,经验是 按照如下步骤操作

先不使用任何Layout,把所有控件 按位置 摆放在界面上

然后先从 最内层开始 进行控件的 Layout 设定

逐步拓展到外层 进行控件的 Layout设定

最后调整 layout中控件的大小比例, 优先使用 Layout的 layoutStrentch 属性来控制

十、发布程序

1、pip install pyinstaller
2、使用pyinstaller打包要发布的程序
在该文件的终端输入
直接使用pyinstaller 打包 会导致生成很多文件 不利于使用 加两个参数

pyinstaller -Fw  文件名.py
-w 表示不显示终端
-F 将所有的库打包成一个文件

十一、QLineEdit 控件与其回显模式

1、共四种回显模式

Normal
NoEcho
Password
PasswordEchoOnEdit

2、一个小案例

# 时间:2022/11/1 20:14
# cky
from PyQt5.QtWidgets import *
import sys
class lineEditEcho(QWidget):def __init__(self):super(lineEditEcho, self).__init__()self.initUI()def initUI(self):self.setWindowTitle('回显模式')#设置为表单布局layout=QFormLayout(self)  #表示把这个表单加到窗体上 否则不显示#若这里不写self 则需要在最后加上# self.setLayout(layout)#设置四个QLineEdit 分别对应四种不同的回显模式nomarllist=QLineEdit()noecholist=QLineEdit()pwdlist=QLineEdit()pwdechollist=QLineEdit()#表单布局的不同之处 是添加addRow(标签值,哪个QLineEdit)layout.addRow("normal",nomarllist)layout.addRow("noecho",noecholist)layout.addRow("pwd",pwdlist)layout.addRow("pwdecho",pwdechollist)#设置默认显示内容nomarllist.setPlaceholderText('noraml')noecholist.setPlaceholderText('noecho')pwdlist.setPlaceholderText('pwd')pwdechollist.setPlaceholderText('pwdcholist')#设置其回显模式nomarllist.setEchoMode(QLineEdit.Normal)noecholist.setEchoMode(QLineEdit.NoEcho)pwdlist.setEchoMode(QLineEdit.Password)pwdechollist.setEchoMode(QLineEdit.PasswordEchoOnEdit)
if __name__ == '__main__':app=QApplication(sys.argv)win=lineEditEcho()win.show()sys.exit(app.exec())

总结:

今日份也有很努力,明天又是一个积极向上的崔崔呀。
题外话:看了一篇微博:讲男权社会下的微胖
微博博主Ericaliga 的置顶文章
这是我非常喜欢的一位博主!女孩子的救星!摆脱男权社会,活出自我!

这篇关于PyQ5 day2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/423729

相关文章

Java预备知识 - day2

1.IDEA的简单使用与介绍 1.1 IDEA的项目工程介绍 Day2_0904:项目名称 E:\0_code\Day2_0904:表示当前项目所在路径 .idea:idea软件自动生成的文件夹,最好不要动 src:src==sourse→源,我们的源代码就放在这个文件夹之内 Day2_0904.iml:也是自动生成的文件,不要动 External Libraries:外部库 我这

【为项目做准备】Linux操作系统day2

这两天学校的事情总压着,day2拖了好几天..day2内容是进程数据结构 进程数据结构信号处理任务状态进程调度运行统计信息进程亲缘关系进程权限用户和组标识符(IDs)linux capabilities 内存管理文件与文件系统用户态与内核态用户态与内核态的转换函数调用栈内核栈和task_struct的关系 进程数据结构 进程or线程,在内核中,统一叫任务(Task),由一个统

Android智能家居实训day2

设置使用的布局文件 setContentView(R.layout.filename);,之后使用布局嵌套,一个布局内部可以嵌套另一个布局,内部的布局相当于外部布局的一个子控件,可以把它当作一个整体来操作,例如在今天的八宫格使用布局嵌套的时候,每一个格子是一个线性布局布局内使用垂直方向,而每两个布局作为一行,一共四行,这样就再拿一个布局框起来使用水平方向最后再把这四个布局用垂直方向。在布局之间分配

算法训练营——day2数组部分例题

1 移除元素-力扣27(简单) 1.1 题目: 移除元素1 1.2 思路及解法 只能覆盖,不能删除 暴力遍历解法 class Solution {public int removeElement(int[] nums, int val) {int size=nums.length;for(int i=0;i<size;i++){if(nums[i]==val){for(int j=

实习项目|苍穹外卖|day2

员工管理 新增员工 1.根据原型进行需求分析与设计(接口文档) 2.根据接口设计DTO(尽量不用原始的employee类) 3.编码controller-》service-》mapper controller:json的话参数前加@requestbody 4.功能测试 Swagger接口测试+前后端联调 5.代码完善 对于第一个问题:设置全局捕获这个SQL异常(这个

网络安全 day2 --- 宝塔搭建网站、phpstudy、IIS搭建网站的区别、docker、建站分配站、前后端分离

宝塔建站 以下步骤目前在VPS上操作 直接网上搜索宝塔官网进行下载window面板,然后安装宝塔面板 https://download.bt.cn/win/panel/BtSoft.zip 也可以直接用我这个下载链接 等待安装成功,安装成功后直接进入宝塔面板 登陆宝塔面板之后我们需要注册一个账号。然后进入宝塔面板安装我们所需要的程序。 直接安装推荐安装的,然后进入软件商店--》一键部

Linux云计算 |【第二阶段】SECURITY-DAY2

主要内容: Zabbix报警机制(创建触发器、设置邮箱、执行动作),Zabbix进阶操作(主动发现、主被动监控模式、拓扑图、聚合图形)、监控案例(监控Nginx服务状态、监控TCP连接状态) 一、Zabbix报警机制概念 - 自定义的监控项默认不会自动报警,首页也不显示报警错误提示,需要配置触发器与报警动作才可实现自动报警,如图所示: 1)触发器(Trigger) 创建触发器时,

go语言day2

使用cmd 中的 go install ; go build 命令出现 go cannot find main module 错误怎么解决? go学习-问题记录(开发环境)go: cannot find main module; see ‘go help modules‘_go: no flags specified (see 'go help mod edit')-CSDN博客

Qt creator day2练习

使用手动连接,将登录框中的取消按钮使用第二种方式,右击转到槽,在该函数中,调用关闭函数,将登录按钮使用Qt4版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为“admin”,密码是否为“123456”,如果账号密码匹配成功,则输出“登录成功”,并关闭该界面,如果匹配失败,则输出登录失败,并将密码框中的内容清空。 头文件 #ifndef WIDGET_H#define

嵌入式实训day2

1、 count=eval(input("请输入两位数"))jin=count//16liang=count%16print(jin,"斤",liang,"两") 2、 num=eval(input("请输入一个三位数:"))res=0res+=num%10res+=num%100//10res+=res//100print("res=",res) 3、