Python PyQt5窗口(1)
在这个例子中我们实现了如下功能:
选中复选框,点击提交,其对应的复选框内容将通过QMessageBox弹出
具备全选的功能
全选的复选框能够实时呈现(全选、半选、未选)下面复选框的选择情况
一、类方法
from PyQt5.QtWidgets import QWidget, QCheckBox, QApplication, QPushButton, QMessageBox, QRadioButton, QLabel,QLineEdit
from PyQt5.QtCore import Qt
import sys
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.label2 = QLabel(self)
self.label2.setText('复选框:')
#新建4个复选框对象
self.cb1 = QCheckBox('全选',self)
self.cb2 = QCheckBox('你是',self)
self.cb3 = QCheckBox('我的',self)
self.cb4 = QCheckBox('宝贝',self)
self.resize(1000,800)
self.setWindowTitle('早点毕业吧')
self.label2.move(20, 20)
self.cb1.move(120,20)
self.cb2.move(220,20)
self.cb3.move(320,20)
self.cb4.move(420,20)
"""
每当复选框的状态改变时,即每当用户选中或取消选中该信号时,就会发出此信号。所以当产生此信号的时候,我们将其连接相应的槽函数。其中全选(cb1)那个复选框对应的是changecb1,其它的是changecb2。
"""
self.cb1.stateChanged.connect(self.changecb1)
self.cb2.stateChanged.connect(self.changecb2)
self.cb3.stateChanged.connect(self.changecb2)
self.cb4.stateChanged.connect(self.changecb2)
self.label3 = QLabel(self)
self.label3.setText('单选框:')
#新建单选框
#self.rb0 = QRadioButton('单选框', self)
self.rb1 = QRadioButton('单选1',self)
self.rb2 = QRadioButton('单选2', self)
#self.rb0.move(20, 140)
self.label3.move(20, 200)
self.rb1.move(120, 200)
self.rb2.move(220, 200)
# 绑定信号和槽
self.rb1.toggled.connect(self.changerb1)
self.rb2.toggled.connect(self.changerb2)
#新建文本输入框
self.label4 = QLabel(self)
self.label4.setText('请填写:')
self.label4.move(20, 300)
self.ql1 = QLineEdit(self)
self.ql1.setPlaceholderText('请输入内容。')
self.ql1.move(120, 300)
# 绑定信号和槽
self.ql1.editingFinished.connect(self.text_finished)
bt = QPushButton('提交',self)
bt.move(20,400)
bt.clicked.connect(self.go)
self.show()
#当按钮被点击之后,根据复选框被选中的类型及数量,我们弹出了不同的信息.
def go(self):
list_chec3 = [] # 复选框传进去的参数放在列表里
if self.cb2.isChecked() and self.cb3.isChecked() and self.cb4.isChecked():
QMessageBox.information(self,'I Love U','你是我的宝贝!')
list_chec3.append('cb2、cb3、cb4')
if self.cb2.isChecked() and self.cb3.isChecked():
QMessageBox.information(self,'I Love U','你是我的!')
if self.cb2.isChecked() and self.cb4.isChecked():
QMessageBox.information(self,'I Love U','你是宝贝!')
if self.cb3.isChecked() and self.cb4.isChecked():
QMessageBox.information(self,'I Love U','我的宝贝!')
if self.cb2.isChecked():
QMessageBox.information(self,'I Love U','你是!')
list_chec3.append('cb2')
if self.cb3.isChecked():
QMessageBox.information(self,'I Love U','我的!')
list_chec3.append('cb3')
if self.cb4.isChecked():
QMessageBox.information(self,'I Love U','宝贝!')
list_chec3.append('cb4')
if self.rb1.isChecked():
#QMessageBox.information(self, '单选框1', '被选中。')
print('单选框1', '被选中。')
if self.ql1.isEnabled():
print('1111')
print(self.ql1.text())
else:
QMessageBox.information(self,'I Love U','貌似你没有勾选啊!')
print(list_chec3)
def changecb1(self):
if self.cb1.checkState() == Qt.Checked:
self.cb2.setChecked(True)
self.cb3.setChecked(True)
self.cb4.setChecked(True)
elif self.cb1.checkState() == Qt.Unchecked:
self.cb2.setChecked(False)
self.cb3.setChecked(False)
self.cb4.setChecked(False)
"""
isChecked()主要是判断复选框是否被选中,要是选中就返回True,否则返回False。
"""
def changecb2(self):
if self.cb2.isChecked() and self.cb3.isChecked() and self.cb4.isChecked():
self.cb1.setCheckState(Qt.Checked)
elif self.cb2.isChecked() or self.cb3.isChecked() or self.cb4.isChecked():
self.cb1.setTristate()
self.cb1.setCheckState(Qt.PartiallyChecked)
else:
self.cb1.setTristate(False)
self.cb1.setCheckState(Qt.Unchecked)
def changerb1(self):
if self.rb1.isChecked():
print('单选框1被选中。')
def changerb2(self):
if self.rb2.isChecked():
print('单选框2被选中。')
def text_finished(self):
print(self.ql1.text())
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
二、不设置类
# -*- coding: utf-8 -*-
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox, QRadioButton
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys
def func(state):
if state == 2:
print('选中')
elif state == 0:
print('取消选中')
def func2(state):
list_chec = [ck1, ck2, ck3]
list_chec2 =[]
for i in range(0,len(list_chec)):
if state == 2:
print('选中')
list_chec2.append(list_chec[i].text())
#print(list_chec2)
elif state == 0:
print('取消选中')
return list_chec2
# 1.创建应用程序
app = QApplication(sys.argv)
# 2.创建窗口
window = QWidget()
# 修改窗口标题
window.setWindowTitle('传参对话框')
"""------------------ 窗口布局 ------------------"""
#layout = QHBoxLayout() #水平盒布局
layout = QGridLayout() #格栅布局,也被称作网格布局(多行多列)
# 添加到窗口中
window.setLayout(layout)
window.setGeometry(100,100,400,200)
# 控件
label = QLabel()
label.setText('爱好:')
ck1 = QCheckBox('抽烟')
ck2 = QCheckBox('喝酒')
ck3 = QCheckBox('烫头')
# label.move(15,20)
# ck1.move(30, 170)
# 第一个默认选中
# ck1.setChecked(True)
# 添加控件到布局中
#layout.addWidget(label) #.addWidget(b, *position) # *p表示将元组(x,y)转换为x y
layout.addWidget(label, 5, 10)
layout.addWidget(ck1, 5, 20)
layout.addWidget(ck2, 5, 30)
layout.addWidget(ck3, 5, 40)
# 绑定信号和槽
# state =0
# list_chec2 = func2(state)
ck1.stateChanged.connect(func2)
ck2.stateChanged.connect(func2)
ck3.stateChanged.connect(func2)
#print(list_chec2)
def func_n_1(checked):
'''
状态变化的槽函数
:param checked: 是否被选中
:return:
'''
print('状态变化',checked)
"""------------------ 创建布局 ------------------"""
# layout = QHBoxLayout()
# # 添加布局到窗口中
# window.setLayout(layout)
# 创建两个单选框
label = QLabel()
label.setText('性别:')
rb1 = QRadioButton('男')
rb2 = QRadioButton('女')
#rb1.move(30, 170)
# 设置rb1 为默认选项
rb1.setChecked(True)
# 添加到布局中
layout.addWidget(label, 8, 10)
layout.addWidget(rb1, 8, 20)
layout.addWidget(rb2, 8, 30)
# 绑定信号和槽
rb1.toggled.connect(func_n_1)
def enterPress():
print('已输入')
print(ql1.text())
# def textchanged(text):
# print('输入的内容为'+text)
"""------------------ 创建布局 ------------------"""
label = QLabel()
label.setText('请填写:')
ql1 = QLineEdit()
#rb1.move(30, 170)
# 设置rb1 为默认选项
ql1.setPlaceholderText('请输入内容。')
# 添加到布局中
layout.addWidget(label, 11, 10)
layout.addWidget(ql1, 11, 20)
#ql1.editingFinished.connect(textchanged)
ql1.editingFinished.connect(enterPress)
#ql1.textChanged.connect(textchanged)
# """------------------ 创建布局 ------------------"""
#
# label = QLabel()
# label.setText('请填写:')
#
# qi1 = QInputDialog()
# #rb1.move(30, 170)
# # 设置rb1 为默认选项
#
# # 添加到布局中
# layout.addWidget(label, 14, 10)
# layout.addWidget(qi1, 14, 20)
def func_main():
list_chec3 = [] #复选框传进去的参数放在列表里
if ck1.isChecked():
print('ck1')
list_chec3.append('ck1')
if ck2.isChecked():
print('ck2')
list_chec3.append('ck2')
if ck3.isChecked():
print('ck3')
list_chec3.append('ck3')
if rb1.isChecked():
print('rb1')
#QMessageBox.information( "消息框标题", "我RadioButton按钮被选中啦!", QMessageBox.Yes | QMessageBox.No)
if rb2.isChecked():
#QMessageBox.information("消息框标题", "我RadioButton2按钮被选中啦!", QMessageBox.Yes | QMessageBox.No)
print('rb2')
print(list_chec3)
# def func_main():
# print('传入参数,运行主程序。')
okButton = QtWidgets.QPushButton()
layout.addWidget(okButton, 20, 10)
okButton.setText('确定')
#okButton.setGeometry(QtCore.QRect(70, 70, 75, 23))
#okButton.setObjectName("okButton")
# 绑定信号和槽
#okButton.clicked.connect(func_main)
okButton.clicked.connect(func_main)
# 3.显示窗口
window.show()
# 4.等待窗口停止
sys.exit(app.exec())