PySide6小项目总结

Pyside6项目总结


00.登录窗口

在QtDesigner页面:
login.ui
设计界面如图所示
main_login.py
基础程序模版,几乎所有的widget这个模版

from PySide6.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QLineEdit
from login import Ui_Form


class MyWindow(QWidget, Ui_Form):
    def __init__(self):
        super().__init__()  # 继承父类的初始化方法

        self.setupUi(self)


if __name__ == "__main__":
    app = QApplication([])
    # 加载窗体界面
    window = MyWindow()
    window.show()
    app.exec()  # 启动循环


01.计算器

在QtDesigner页面:
calcular.ui
计算机QtDesign页面
main_calcular.py

from PySide6.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QLineEdit
from calculator import Ui_Form


class MyWindow(QWidget, Ui_Form):
    def __init__(self):
        super().__init__()  # 继承父类的初始化方法

        self.setupUi(self)
        self.result = ''
        self.bind()

    def bind(self):
        self.pushButton_0.clicked.connect(lambda: self.addNumber('0'))
        self.pushButton1.clicked.connect(lambda: self.addNumber('1'))
        self.pushButton_2.clicked.connect(lambda: self.addNumber('2'))
        self.pushButton_3.clicked.connect(lambda: self.addNumber('3'))
        self.pushButton_4.clicked.connect(lambda: self.addNumber('4'))
        self.pushButton_5.clicked.connect(lambda: self.addNumber('5'))
        self.pushButton_6.clicked.connect(lambda: self.addNumber('6'))
        self.pushButton_7.clicked.connect(lambda: self.addNumber('7'))
        self.pushButton_8.clicked.connect(lambda: self.addNumber('8'))
        self.pushButton_9.clicked.connect(lambda: self.addNumber('9'))
        self.pushButton_add.clicked.connect(lambda: self.addNumber('+'))
        self.pushButton_dot.clicked.connect(lambda: self.addNumber('.'))
        self.pushButton_div.clicked.connect(lambda: self.addNumber('/'))
        self.pushButton_mul.clicked.connect(lambda: self.addNumber('*'))
        self.pushButton_sub.clicked.connect(lambda: self.addNumber('-'))
        self.pushButton_enter.clicked.connect(self.equal)

        self.pushButton_clear.clicked.connect(self.clear)
        self.pushButton_back.clicked.connect(self.back)

    def addNumber(self, number):
        self.lineEdit.clear()
        self.result += number
        self.lineEdit.setText(self.result)

    def equal(self):
        self.numberResult = eval(self.result)
        self.lineEdit.setText(str(self.numberResult))

    def clear(self):
        self.result = ''
        self.lineEdit.clear()

    def back(self):
        self.result = self.result[:-1]
        self.lineEdit.setText(self.result)


if __name__ == "__main__":
    app = QApplication([])
    # 加载窗体界面
    window = MyWindow()
    window.show()
    app.exec()  # 启动循环


02.进制转换器

在QtDesigner页面:
convert.ui
进制转换器
main_convert.py

from PySide6.QtWidgets import QApplication, QWidget, QPushButton, QComboBox
from convert import Ui_Form


class MyWindow(QWidget, Ui_Form):
    def __init__(self):
        super().__init__()  # 继承父类的初始化方法

        self.setupUi(self)

        # 用于存储数据类型的字典
        self.lengthVar = {'米': 100, '千米': 100000, '厘米': 1, '分米': 10}
        self.weightVar = {'克': 1, '千克': 1000, '斤': 500}
        self.TypeDict = {'长度': self.lengthVar, '质量': self.weightVar}

        self.comboBox_datetype.addItems(self.TypeDict.keys())
        self.comboBox_input1.addItems(self.lengthVar.keys())
        self.comboBox_input2.addItems(self.lengthVar.keys())
        self.bind()

    def bind(self):
        self.comboBox_datetype.currentTextChanged.connect(self.type_changed)
        self.pushButton.clicked.connect(self.calc)

    def calc(self):
        bigType = self.comboBox_datetype.currentText()
        # 获取第一个输入框的值
        value = self.lineEdit_input1.text()
        if value == '':
            return
        currentType = self.comboBox_input1.currentText()
        transType = self.comboBox_input2.currentText()

        stand = float(value) * self.TypeDict[bigType][currentType]
        result = stand / self.TypeDict[bigType][transType]

        self.label_originDate.setText(f'{value}{currentType} = ')
        self.label_transDate.setText(f'{result}{transType}')
        self.lineEdit_input2.setText(str(result))

    def type_changed(self, text):
        self.comboBox_input1.clear()
        self.comboBox_input2.clear()

        self.comboBox_input1.addItems(self.TypeDict[text].keys())
        self.comboBox_input2.addItems(self.TypeDict[text].keys())


if __name__ == "__main__":
    app = QApplication([])
    # 加载窗体界面
    window = MyWindow()
    window.show()
    app.exec()  # 启动循环



03.被选中按钮

在QtDesigner页面:
convert1.ui
在这里插入图片描述
在这里插入图片描述
main_radiobutton.py

from PySide6.QtWidgets import QApplication, QWidget, QPushButton, QComboBox
from convert1 import Ui_Form


class MyWindow(QWidget, Ui_Form):
    def __init__(self):
        super().__init__()  # 继承父类的初始化方法
        self.setupUi(self)
        self.sexy = ''
        self.country = ''
        self.bind()
        # self.label.setText(f'您的性别是:{self.sexy},您的国家是{self.country}')

    def bind(self):
        # radio_buttons = self.groupBox.findChildren()
        self.radioButton.clicked.connect(lambda: self.setSexy(0))
        self.radioButton_2.clicked.connect(lambda: self.setSexy(1))
        self.radioButton_3.clicked.connect(lambda: self.setCountry(0))
        self.radioButton_4.clicked.connect(lambda: self.setCountry(1))

    def setSexy(self, sexy):
        if sexy == 0:
            self.sexy = '男'
        else:
            self.sexy = '女'
        self.label.setText(f'您的性别是:{self.sexy},您的国家是{self.country}')

    def setCountry(self, country):
        if country == 0:
            self.country = '中国'
        else:
            self.country = '日本'
        self.label.setText(f'您的性别是:{self.sexy},您的国家是{self.country}')

        # sexy = self.groupBox.children()
        # country = self.groupBox_2.children()

        # # if selected_button is not None and selected_button1 is not None:
        #     self.label.setText(f'您的性别是:{selected_button.text()},您的国家是{selected_button1.text()}')


if __name__ == "__main__":
    app = QApplication([])
    # 加载窗体界面
    window = MyWindow()
    window.show()
    app.exec()  # 启动循环



04.富纯文本框

在QtDesigner页面:
textedit.ui
在这里插入图片描述
在这里插入图片描述
main.py

from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QTextEdit


class MyWindow(QWidget):
    def __init__(self):
        super().__init__()  # 继承父类的初始化方法
        # self.setupUi(self)

        self.btn = QPushButton('追加文本')
        self.textedit = QTextEdit()

        layout = QVBoxLayout()
        layout.addWidget(self.textedit)
        layout.addWidget(self.btn)
        self.setLayout(layout)
        self.textedit.setText("你好,我是张三")

        # btn.clicked.connect(lambda: textedit.append('你好,我是李四'))
        self.btn.clicked.connect(self.appendtext)

    def appendtext(self):
        self.textedit.append('你好,我是李四')


if __name__ == "__main__":
    app = QApplication([])
    # 加载窗体界面
    window = MyWindow()
    window.show()
    app.exec()  # 启动循环



05.翻译器

在QtDesigner页面:
translate.ui
在这里插入图片描述
在这里插入图片描述
main.ui

from PySide6.QtWidgets import QApplication, QWidget, QPushButton, QComboBox
from translate import Ui_Form


class MyWindow(QWidget, Ui_Form):
    def __init__(self):
        super().__init__()  # 继承父类的初始化方法
        self.setupUi(self)
        self.fromlanguage = 0
        self.tolanguage = 0

        self.bind()

    def bind(self):
        # self.pushButton.clicked.connect(self.translate)
        self.radioButton_2.clicked.connect(lambda: self.setFromLanguage(0))
        self.radioButton_2.clicked.connect(lambda: self.setFromLanguage(1))
        self.radioButton_2.clicked.connect(lambda: self.setFromLanguage(2))
        self.comboBox.currentIndexChanged.connect(lambda: self.setToLanguage(self.comboBox.currentIndex() + 1))

    def setFromLanguage(self, language):
        self.fromlanguage = language

    def setToLanguage(self, language):
        print(language)
        self.tolanguage = language

    def translate(self):
        # 获取输入的文本
        inputtext = self.plainTextEdit.toPlainText()
        result = connect(inputtext, fromlanguage=self.fromlanguage, tolanguage=self.tolanguage)

        # 把结果放到文本框中
        # self.plainTextEdit_2.setPlainText(inputtext)
        self.plainTextEdit_2.setText(result['trans'])


if __name__ == "__main__":
    app = QApplication([])
    # 加载窗体界面
    window = MyWindow()
    window.show()
    app.exec()  # 启动循环



06.Slider滑条

在QtDesigner页面:
slider.ui
在这里插入图片描述
在这里插入图片描述
main.ui

from PySide6.QtWidgets import QApplication, QWidget, QPushButton, QComboBox
from slider import Ui_Form


class MyWindow(QWidget, Ui_Form):
    def __init__(self):
        super().__init__()  # 继承父类的初始化方法
        self.setupUi(self)
        self.horizontalSlider.valueChanged.connect(self.showslider)

    def showslider(self):
        Slider = self.sender()
        print(f'滑条的值是:{Slider.value()}')


if __name__ == "__main__":
    app = QApplication([])
    # 加载窗体界面
    window = MyWindow()
    window.show()
    app.exec()  # 启动循环

07.常用控件布局

在QtDesigner页面:
gridout.py

from PySide6.QtWidgets import QApplication, QWidget, QPushButton, QLineEdit, QVBoxLayout, QHBoxLayout, QLabel, \
    QFormLayout, QGridLayout

"""
QVBoxLayout:垂直布局
QHBoxLayout:水平布局
QFormLayout:表单布局
QGridLayout:格子布局
"""


class MyWindow(QWidget):
    def __init__(self):
        super().__init__()  # 继承父类的初始化方法
        # self.setupUi(self)
        self.mainLayout = QVBoxLayout()  # 垂直控件

        self.gridLayout = QGridLayout()
        self.gridLayout.addWidget(QLabel('用户:'), 0, 0)
        self.gridLayout.addWidget(QLineEdit(), 0, 1)

        self.gridLayout.addWidget(QLabel('密码:'), 1, 0)
        self.gridLayout.addWidget(QLineEdit(), 1, 1)
        self.gridLayout.addWidget(QPushButton('登陆'), 2, 0, 1, 2)

        self.mainLayout.addLayout(self.gridLayout)
        self.setLayout(self.mainLayout)


if __name__ == "__main__":
    app = QApplication([])
    # 加载窗体界面
    window = MyWindow()
    window.show()
    app.exec()  # 启动循环

main.py

from PySide6.QtWidgets import QApplication, QWidget, QPushButton, QLineEdit, QVBoxLayout, QHBoxLayout, QLabel, \
    QFormLayout, QGridLayout

"""
QVBoxLayout:垂直布局
QHBoxLayout:水平布局
QFormLayout:表单布局
QGridLayout
"""


class MyWindow(QWidget):
    def __init__(self):
        super().__init__()  # 继承父类的初始化方法
        # self.setupUi(self)
        self.mainLayout = QVBoxLayout()  # 垂直控件

        # self.userLayout = QHBoxLayout()
        # self.userLayout.addWidget(QLabel('用户:'))
        # self.userLayout.addWidget(QLineEdit())
        # self.mainLayout.addLayout(self.userLayout)
        #
        # self.passwordLayout = QHBoxLayout()
        # self.passwordLayout.addWidget(QLabel('密码:'))
        # self.passwordLayout.addWidget(QLineEdit())
        # self.mainLayout.addLayout(self.passwordLayout)
        #
        # self.mainLayout.addWidget(QPushButton('登陆'))
        # self.mainLayout.addWidget(QPushButton('取消'))
        self.userLayout = QFormLayout()
        self.userLayout.addRow('用户:', QLineEdit())
        self.userLayout.addRow('密码:', QLineEdit())
        self.userLayout.addWidget(QPushButton('登陆'))
        self.mainLayout.addLayout(self.userLayout)

        self.setLayout(self.mainLayout)


if __name__ == "__main__":
    app = QApplication([])
    # 加载窗体界面
    window = MyWindow()
    window.show()
    app.exec()  # 启动循环



08.综合窗口(不借助QtDesigner)

在QtDesigner页面:
main.ui

from PySide6.QtWidgets import QApplication, QWidget, QPushButton, QLineEdit, QVBoxLayout, QHBoxLayout, QLabel, \
    QFormLayout, QGridLayout, QComboBox, QCheckBox, QRadioButton, QButtonGroup, QTextEdit, QPlainTextEdit, QSlider
from PySide6.QtCore import Qt


class MyWindow(QWidget):
    def __init__(self):
        super().__init__()  # 继承父类的初始化方法
        # self.setupUi(self)
        self.mainLayout = QVBoxLayout()  # 垂直控件

        self.lab1 = QLabel('标签1')
        self.lab1.setAlignment(Qt.AlignmentFlag.AlignCenter)
        self.btn1 = QPushButton('按钮1')

        self.lineedit = QLineEdit()
        self.lineedit.setPlaceholderText('请输入内容')
        self.lineedit.setEchoMode(QLineEdit.EchoMode.Password)

        self.combox = QComboBox()
        self.combox.setPlaceholderText('请选择')
        self.combox.addItems(['选项1', '选项2', '选项3'])
        self.combox.removeItem(0)

        self.checkbox1 = QCheckBox('选项1')
        # self.checkbox1.setCheckable(False)
        # self.checkbox1.setChecked(True)
        self.checkbox2 = QCheckBox('选项2')

        self.ButtonGroup2 = QButtonGroup()
        self.gendernan = QRadioButton('男')
        self.gendernv = QRadioButton('女')
        self.ButtonGroup2.addButton(self.gendernan)
        self.ButtonGroup2.addButton(self.gendernv)
        self.ButtonGroup1 = QButtonGroup()
        self.mathradio = QRadioButton('数学')
        self.englishradio = QRadioButton('英语')
        self.ButtonGroup1.addButton(self.mathradio)
        self.ButtonGroup1.addButton(self.englishradio)

        self.richtext = QTextEdit()
        self.richtext.setPlaceholderText('请输入文本')
        self.plaintext = QPlainTextEdit()
        self.plaintext.setPlaceholderText('请输入文本')

        self.slider = QSlider()
        self.slider.setOrientation(Qt.Orientation.Horizontal)
        self.slider.setTickPosition(QSlider.TickPosition.TicksBelow)
        self.slider.setTickInterval(10)
        self.slider.setRange(10, 200)

        self.mainLayout.addWidget(self.lab1)
        self.mainLayout.addWidget(self.btn1)
        self.mainLayout.addWidget(self.lineedit)
        self.mainLayout.addWidget(self.combox)
        self.mainLayout.addWidget(self.checkbox1)
        self.mainLayout.addWidget(self.checkbox2)
        self.mainLayout.addWidget(self.gendernan)
        self.mainLayout.addWidget(self.gendernv)
        self.mainLayout.addWidget(self.mathradio)
        self.mainLayout.addWidget(self.englishradio)
        self.mainLayout.addWidget(self.richtext)
        self.mainLayout.addWidget(self.plaintext)
        self.mainLayout.addWidget(self.slider)

        self.setLayout(self.mainLayout)
        self.bind()

    def bind(self):
        self.btn1.clicked.connect(self.showlabel)
        self.lineedit.textChanged.connect(self.showtext)
        self.lineedit.returnPressed.connect(self.showtext1)
        self.combox.currentTextChanged.connect(self.showcurrenttext)
        self.checkbox1.stateChanged.connect(self.statechange1)
        self.checkbox2.stateChanged.connect(self.statechange2)
        self.gendernan.clicked.connect(lambda: print('男'))
        self.gendernv.clicked.connect(lambda: print('女'))
        self.ButtonGroup1.buttonClicked.connect(self.whichButtonclicked)
        self.richtext.textChanged.connect(lambda: print('富文本框内容发生了变化'))
        self.slider.valueChanged.connect(lambda: print(f'slider内容发生了变化:{self.slider.value()}'))

    def showlabel(self):
        print('按钮1被点击了')

    def showtext(self, text):
        print(f'文本框中的内容改变:{text}')

    def showtext1(self):
        print(f'回车键按下')
        print(f'文本框中的内容是:{self.lineedit.text()}')

    def showcurrenttext(self, text):
        print(f'下拉框中的内容是:{text}')

    def statechange1(self, state):
        print(f'下拉框发生了变化,此时状态是:{state}')

    def statechange2(self):
        print(f'下拉框是否被选中:{self.checkbox2.isChecked()}')

    def whichButtonclicked(self):
        print(f'单选按钮组被点击了')
        print(f'被选中的按钮:{self.ButtonGroup1.checkedButton().text()}')


if __name__ == "__main__":
    app = QApplication([])
    # 加载窗体界面
    window = MyWindow()
    window.show()
    app.exec()  # 启动循环

09.QMessageBox(不借助QtDesigner)

在QtDesigner页面:
main.py

from PySide6.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QMessageBox


class MyWindow(QWidget):
    def __init__(self):
        super().__init__()  # 继承父类的初始化方法
        self.resize(300, 400)
        self.mainLayout = QVBoxLayout()  # 垂直控件
        self.btn = QPushButton('按钮')

        self.mainLayout.addWidget(self.btn)
        self.setLayout(self.mainLayout)
        self.bind()

    def bind(self):
        self.btn.clicked.connect(self.btnclicked)

    def btnclicked(self):
        replay = QMessageBox.information(self, '标题', '内容',
                                         QMessageBox.StandardButton.Ok | QMessageBox.StandardButton.No | QMessageBox.StandardButton.Discard | QMessageBox.StandardButton.Apply,
                                         QMessageBox.StandardButton.Ok)
        if replay == QMessageBox.StandardButton.Ok:
            print('按钮Ok被点击了')
        elif replay == QMessageBox.StandardButton.No:
            print('按钮No被点击了')
        elif replay == QMessageBox.StandardButton.Discard:
            print('按钮Discard被点击了')
        elif replay == QMessageBox.StandardButton.Apply:
            print('按钮Apply被点击了')
        QMessageBox.question(self, '标题', '内容')
        QMessageBox.warning(self, '标题', '内容')
        QMessageBox.critical(self, '标题', '内容')
        QMessageBox.about(self, '标题', '内容')


if __name__ == "__main__":
    app = QApplication([])
    # 加载窗体界面
    window = MyWindow()
    window.show()
    app.exec()  # 启动循环



10.QInputDialog(不借助QtDesigner)

main.py

from PySide6.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QMessageBox, QInputDialog, QLineEdit


class MyWindow(QWidget):
    def __init__(self):
        super().__init__()  # 继承父类的初始化方法
        self.resize(400, 300)
        self.btn = QPushButton('获取一个数字')
        self.btn2 = QPushButton('获取一个浮点数字')
        self.btn3 = QPushButton('获取一个Item')
        self.btn4 = QPushButton('获取单行文字')
        self.btn5 = QPushButton('获取多行文字')

        self.mainLayout = QVBoxLayout()  # 垂直控件
        self.mainLayout.addWidget(self.btn)
        self.mainLayout.addWidget(self.btn2)
        self.mainLayout.addWidget(self.btn3)
        self.mainLayout.addWidget(self.btn4)
        self.mainLayout.addWidget(self.btn5)
        self.setLayout(self.mainLayout)
        self.bind()

    def bind(self):
        self.btn.clicked.connect(self.getIntDialog)
        self.btn2.clicked.connect(self.getFloatDialog)
        self.btn3.clicked.connect(
            lambda: print(QInputDialog.getItem(self, '标题', '内容', ['张三', '王五', '李四'], 0, False)))
        self.btn4.clicked.connect(
            lambda: print(QInputDialog.getText(self, '标题', '内容', QLineEdit.EchoMode.Normal, '默认值')))
        self.btn5.clicked.connect(lambda: print(QInputDialog.getMultiLineText(self, '标题', '内容', '默认值')))

    def getIntDialog(self):
        replay, ok = QInputDialog.getInt(self, '标题', '内容', 1, 0, 100, 1)
        if ok:
            print(f'{replay}')

    def getFloatDialog(self):
        replay_float, ok = QInputDialog.getDouble(self, '标题', '内容', 1, 0, 100, 4)
        if ok:
            print(f'{replay_float}')


if __name__ == "__main__":
    app = QApplication([])
    # 加载窗体界面
    window = MyWindow()
    window.show()
    app.exec()  # 启动循环

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值