Python PyQt5窗口(1)

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())

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值