PyQt简单的图形界面、布局(显示文本,按钮等)
1. 显示文本
import sys
from PyQt5.QtWidgets import QApplication,QLabel #从pyqt5容器中引入文本标签
if __name__ == '__main__':
app = QApplication(sys.argv) #实例化应用,sys.argv中间是一点
label = QLabel('Hello World!') #实例化文本标签
label.show() #显示标签
sys.exit(app.exec_())
2. 显示文本和按钮
import sys
from PyQt5.QtWidgets import QApplication,QLabel,QPushButton #从pyqt5容器中引入文本标签和按钮
if __name__ == '__main__':
app = QApplication(sys.argv) #实例化应用,sys.argv中间是一点
btn = QPushButton('I am button') #实例化按钮
label = QLabel('I am label') #实例化文本标签
btn.show() #显示按钮
label.show() #显示标签
sys.exit(app.exec_())
3. 封装成类
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QLabel #从pyqt5容器中引入文本标签
#封装成类
class Wenben(QWidget):
def __init__(self): #初始化QWidget本身
super(Wenben,self).__init__() #super() 函数是用于调用父类(超类)的一个方法。Wenben调用其父类QWidget
self.label = QLabel('I am Label!',self)
if __name__ == '__main__':
app = QApplication(sys.argv) #实例化应用,sys.argv中间是一点
wenben = Wenben() #实例化文本
wenben.show() #显示文本
sys.exit(app.exec_())
4. 使用move函数定位布局(使用move布局是固定位置的,不会随窗口大小而改变)
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QLabel,QPushButton #从pyqt5容器中引入文本标签,按钮
#封装成类
class Wenben(QWidget):
def __init__(self): #初始化QWidget本身
super(Wenben,self).__init__() #super() 函数是用于调用父类(超类)的一个方法。Wenben调用其父类QWidget
self.label = QLabel('I am Label!',self)
self.btn = QPushButton('I am button',self)
self.label.move(20,20) #使用move定位
self.btn.move(20,60) #使用move定位
if __name__ == '__main__':
app = QApplication(sys.argv) #实例化应用,sys.argv中间是一点
wenben = Wenben() #实例化文本
wenben.show() #显示文本
sys.exit(app.exec_())
5. 使用QVBoxLayout进行垂直布局(使用布局容器进行布局,控件大小随窗体大小而改变)
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QLabel,QPushButton,QVBoxLayout #从pyqt5容器中引入文本标签,按钮
#封装成类
class BuJu(QWidget):
def __init__(self): #初始化QWidget本身
super(BuJu,self).__init__() #super() 函数是用于调用父类(超类)的一个方法。Wenben调用其父类QWidget
self.username = QLabel('用户名',self)
self.psw = QLabel('密码',self)
#使用QVBoxLayout
self.vLayout = QVBoxLayout() #定义一个布局
self.vLayout.addWidget(self.username) #往布局里添加元素
self.vLayout.addWidget(self.psw) #往布局里添加元素
self.setLayout(self.vLayout) #使布局生效
if __name__ == '__main__':
app = QApplication(sys.argv) #实例化应用,sys.argv中间是一点
buju = BuJu() #实例化
buju.show() #显示内容
sys.exit(app.exec_())
6.使用QHBoxLayout进行水平布局(使用布局容器进行布局,控件大小随窗体大小而改变)
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QLabel,QLineEdit,QHBoxLayout #从pyqt5容器中引入文本标签,按钮
#封装成类
class BuJu(QWidget):
def __init__(self): #初始化QWidget本身
super(BuJu,self).__init__() #super() 函数是用于调用父类(超类)的一个方法。Wenben调用其父类QWidget
self.username = QLabel('用户名',self)
self.usernameEdit = QLineEdit(self)
#使用QHBoxLayout
self.hLayout = QHBoxLayout()
self.hLayout.addWidget(self.username)
self.hLayout.addWidget(self.usernameEdit)
self.setLayout(self.hLayout)
if __name__ == '__main__':
app = QApplication(sys.argv) #实例化应用,sys.argv中间是一点
buju = BuJu() #实例化
buju.show() #显示内容
sys.exit(app.exec_())
7.使用QVBoxLayout和QHBoxLayout进行综合布局/嵌套布局(使用布局容器进行布局,控件大小随窗体大小而改变)
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QLabel,QLineEdit,QVBoxLayout,QHBoxLayout #从pyqt5容器中引入文本标签,按钮
#封装成类
class BuJu(QWidget):
def __init__(self): #初始化QWidget本身
super(BuJu,self).__init__() #super() 函数是用于调用父类(超类)的一个方法。Wenben调用其父类QWidget
self.username = QLabel('用户名',self)
self.psw = QLabel('密 码',self)
self.usernameEdit = QLineEdit(self)
self.pswEdit = QLineEdit(self)
#使用QHBoxLayout
self.hLayout = QHBoxLayout()
self.hLayout.addWidget(self.username)
self.hLayout.addWidget(self.usernameEdit)
self.hLayout2 = QHBoxLayout()
self.hLayout2.addWidget(self.psw)
self.hLayout2.addWidget(self.pswEdit)
# 使用QVBoxLayout
self.vLayout = QVBoxLayout() #定义一个垂直布局
self.vLayout.addLayout(self.hLayout) #往垂直布局里添加元素
self.vLayout.addLayout(self.hLayout2) #往垂直布局里添加元素
self.setLayout(self.vLayout) #使垂直布局生效
if __name__ == '__main__':
app = QApplication(sys.argv) #实例化应用,sys.argv中间是一点
buju = BuJu() #实例化
buju.show() #显示内容
sys.exit(app.exec_())
8. 制作登录框(布局,信号与槽)
直接贴代码
import sys
from PyQt5.QtCore import*
from PyQt5.QtWidgets import QApplication,QWidget,QLabel,QLineEdit,QPushButton,QVBoxLayout,QHBoxLayout #从pyqt5容器中引入文本标签,按钮
#封装成类
class BuJu(QWidget):
def __init__(self): #初始化QWidget本身
super(BuJu,self).__init__() #super() 函数是用于调用父类(超类)的一个方法。Wenben调用其父类QWidget
self.setWindowTitle('登录框')
self.username = QLabel('用户名',self)
self.psw = QLabel('密 码',self)
self.usernameEdit = QLineEdit(self)
self.pswEdit = QLineEdit(self)
self.pswEdit.setEchoMode(QLineEdit.Password)# 设置输入密码为圆点
self.loginBtn = QPushButton('登 录',self)
self.exitBtn = QPushButton('关 闭',self)
#使用QHBoxLayout
self.hLayout = QHBoxLayout()
self.hLayout.addWidget(self.username)
self.hLayout.addWidget(self.usernameEdit)
self.hLayout2 = QHBoxLayout()
self.hLayout2.addWidget(self.psw)
self.hLayout2.addWidget(self.pswEdit)
self.hLayout3 = QHBoxLayout()
self.hLayout3.addWidget(self.loginBtn)
self.hLayout3.addWidget(self.exitBtn)
# 使用QVBoxLayout
self.vLayout = QVBoxLayout() #定义一个垂直布局
self.vLayout.addLayout(self.hLayout) #往垂直布局里添加元素
self.vLayout.addLayout(self.hLayout2) #往垂直布局里添加元素
self.vLayout.addLayout(self.hLayout3) # 往垂直布局里添加元素
self.setLayout(self.vLayout) #使垂直布局生效
#信号
self.loginBtn.clicked.connect(lambda:self.login())
self.exitBtn.clicked.connect(QCoreApplication.quit) #文件头需要引用from PyQt5.QtCore import*
#槽函数
def login(self):
print("你的用户名是:"+self.usernameEdit.text())
print("你的密码是:" + self.pswEdit.text())
if __name__ == '__main__':
app = QApplication(sys.argv) #实例化应用,sys.argv中间是一点
buju = BuJu() #实例化
buju.show() #显示内容
sys.exit(app.exec_())
9. 将python程序打包成exe
下载安装pyinstaller
在pip目录执行 pip install pyinstaller 命令即可(请将pip设置为环境变量)
在python工程项目目录打开命令窗口,运行命令 pyinstaller -F -w -i image.ico test.py 即可(-F表示打包成一个exe文件,包括其依赖库,-w是否显示黑框,-i表示窗口图标)