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
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() # 启动循环