按钮控件
父类:QAbstractButton
子类:QPushButton、AToolButton、QRadioButton、QCheckBox
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class QPushButtonDemo(QDialog):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('QPushButtonDemo')
layout = QVBoxLayout()
self.button1 = QPushButton('第一个按钮')
self.button1.setCheckable(True)
self.button1.toggle()
self.button1.clicked.connect(lambda:self.whichButton(self.button1))
self.button1.clicked.connect(self.buttonState)
self.button2 = QPushButton('图像按钮')
self.button2.setIcon(QIcon(QPixmap('D:/PycharmProjects/pro2/th.jpg')))
self.button2.setCheckable(True)
self.button2.toggle()
self.button2.clicked.connect(lambda: self.whichButton(self.button2))
self.button3 = QPushButton('不可用的按钮')
self.button3.setEnabled((False))
self.button4 = QPushButton('&MyButton')
self.button4.setDefault(True) # 一个窗口只能有一个
self.button4.clicked.connect(lambda: self.whichButton(self.button4))
layout.addWidget(self.button1)
layout.addWidget(self.button2)
layout.addWidget(self.button3)
layout.addWidget(self.button4)
self.setLayout(layout)
self.resize(400,300)
def whichButton(self, btn):
print('被单击的按钮是<' + btn.text() + '>')
def buttonState(self):
if self.button1.isChecked():
print('按钮已被选中')
else:
print('按钮未被选中')
if __name__ == '__main__':
app = QApplication(sys.argv)
main = QPushButtonDemo()
main.show()
sys.exit(app.exec_())
单选按钮控件
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class QRadioButtonDemo(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('QRadioButton')
layout = QHBoxLayout()
self.button1 = QRadioButton('单选按钮1')
self.button1.setChecked(True)
self.button1.toggled.connect(self.buttonState)
self.button2 = QRadioButton('单选按钮2')
self.button2.toggled.connect(self.buttonState)
layout.addWidget(self.button1)
layout.addWidget(self.button2)
self.setLayout(layout)
self.resize(300,200)
def buttonState(self):
radioButton = self.sender()
if radioButton.text() == "单选按钮1":
if radioButton.isChecked() == True:
print(radioButton.text() + '被选中')
else:
print(radioButton.text() + '未被选中')
if radioButton.text() == "单选按钮2":
if radioButton.isChecked() == True:
print(radioButton.text() + '被选中')
else:
print(radioButton.text() + '未被选中')
if __name__ == '__main__':
app = QApplication(sys.argv)
main = QRadioButtonDemo()
main.show()
sys.exit(app.exec_())
复选框控件
# QCheckBoxDemo
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class QCheckBoxDemo(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('复选框控件演示')
layout = QHBoxLayout()
self.checkBox1 = QCheckBox('复选框控件1')
self.checkBox1.setChecked(True)
self.checkBox1.stateChanged.connect(lambda:self.checkBoxState(self.checkBox1))
layout.addWidget(self.checkBox1)
self.checkBox2 = QCheckBox('复选框控件2')
self.checkBox2.stateChanged.connect(lambda: self.checkBoxState(self.checkBox2))
layout.addWidget(self.checkBox2)
self.checkBox3 = QCheckBox('半选中')
self.checkBox3.setTristate(True)
self.checkBox3.setCheckState(Qt.PartiallyChecked)
self.checkBox3.stateChanged.connect(lambda: self.checkBoxState(self.checkBox3))
layout.addWidget(self.checkBox3)
self.setLayout(layout)
def checkBoxState(self, ch):
check1Status = self.checkBox1.text() + ', ischecked=' + str(self.checkBox1.isChecked()) + ',checkState=' + str(self.checkBox1.checkState()) + '\n'
check2Status = self.checkBox2.text() + ', ischecked=' + str(self.checkBox2.isChecked()) + ',checkState=' + str(self.checkBox2.checkState()) + '\n'
check3Status = self.checkBox3.text() + ', ischecked=' + str(self.checkBox3.isChecked()) + ',checkState=' + str(self.checkBox3.checkState()) + '\n'
print(check1Status + check2Status + check3Status)
if __name__ == '__main__':
app = QApplication(sys.argv)
main = QCheckBoxDemo()
main.show()
sys.exit(app.exec_())
下拉列表控件
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class QComboBoxDemo(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('下拉列表控件演示')
self.resize(300,100)
layout = QVBoxLayout()
self.label = QLabel('请选择编程语言')
self.cb = QComboBox()
self.cb.addItem('C++')
self.cb.addItem('Python')
self.cb.addItems(['C++','C#','Ruby'])
self.cb.currentIndexChanged.connect(self.selectionChange)
layout.addWidget(self.label)
layout.addWidget(self.cb)
self.setLayout(layout)
def selectionChange(self,i):
self.label.setText(self.cb.currentText())
self.label.adjustSize()
for count in range(self.cb.count()):
print('item' + str(count) + '=' + self.cb.itemText(count))
print('current index', i, 'selection changed', self.cb.currentText())
if __name__ == '__main__':
app = QApplication(sys.argv)
main = QComboBoxDemo()
main.show()
sys.exit(app.exec_())
滑块控件
# QSliderDemo
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class QSliderDemo(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('滑块控件演示')
self.resize(300,100)
layout = QVBoxLayout()
self.label = QLabel('你好,PyQt5')
self.label.setAlignment(Qt.AlignCenter)
self.slider = QSlider(Qt.Horizontal)
# 设置最小值
self.slider.setMinimum(12)
self.slider.setMaximum(48)
# 设置步长
self.slider.setSingleStep(3)
# 设置当前值
self.slider.setValue(18)
# 设置刻度的位置
self.slider.setTickPosition(QSlider.TicksBelow)
# 设置刻度的间隔
self.slider.setTickInterval(6)
self.slider.valueChanged.connect(self.valueChange)
layout.addWidget(self.label)
layout.addWidget(self.slider)
self.setLayout(layout)
def valueChange(self):
print('当前值:%s' % self.slider.value())
size = self.slider.value()
self.label.setFont(QFont('Arial', size))
if __name__ == '__main__':
app = QApplication(sys.argv)
main = QSliderDemo()
main.show()
sys.exit(app.exec_())
计数器控件
# QSpinBoxDemo
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class QSpinBoxDemo(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('计数器控件')
self.resize(300,100)
layout = QVBoxLayout()
self.label = QLabel('QSpinBox演示')
self.label.setAlignment(Qt.AlignCenter)
self.sb = QSpinBox()
self.sb.valueChanged.connect(self.valueChange)
layout.addWidget(self.label)
layout.addWidget(self.sb)
self.setLayout(layout)
def valueChange(self):
self.label.setText('当前值:' + str(self.sb.value()))
if __name__ == '__main__':
app = QApplication(sys.argv)
main = QSpinBoxDemo()
main.show()
sys.exit(app.exec_())
对话框
父类:QDialog
子类:
QMessageBox(消息对话框)
QFontDialog(字体对话框)
QColorDialog(颜色对话框)
QFileDialog(文件对话框)
QInputDialog(输入对话框)
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class QDialogDemo(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('通用对话框')
self.resize(300, 200)
self.button = QPushButton(self)
self.button.setText('弹出对话框')
self.button.move(50,50)
self.button.clicked.connect(self.showDialog)
def showDialog(self):
dialog = QDialog()
button = QPushButton('关闭', dialog)
button.clicked.connect(dialog.close)
button.move(50,50)
dialog.setWindowTitle('对话框')
dialog.setWindowModality(Qt.ApplicationModal)
dialog.exec()
if __name__ == '__main__':
app = QApplication(sys.argv)
main = QDialogDemo()
main.show()
sys.exit(app.exec_())
消息对话框:
1、关于对话框
2、错误对话框
3、警告对话框
4、提问对话框
5、消息对话框
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class QMessageBoxDemo(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('消息对话框')
self.resize(300, 600)
layout = QVBoxLayout()
self.button1 = QPushButton('显示关于对话框')
self.button1.clicked.connect(self.showDialog)
self.button2 = QPushButton('显示消息对话框')
self.button2.clicked.connect(self.showDialog)
self.button3 = QPushButton('显示警告对话框')
self.button3.clicked.connect(self.showDialog)
self.button4 = QPushButton('显示错误对话框')
self.button4.clicked.connect(self.showDialog)
self.button5 = QPushButton('显示提问对话框')
self.button5.clicked.connect(self.showDialog)
layout.addWidget(self.button1)
layout.addWidget(self.button2)
layout.addWidget(self.button3)
layout.addWidget(self.button4)
layout.addWidget(self.button5)
self.setLayout(layout)
def showDialog(self):
text = self.sender().text()
if text == '显示关于对话框':
QMessageBox.about(self, '关于', '这是一个关于对话框')
elif text == '显示消息对话框':
reply = QMessageBox.information(self, '消息', '这是一个消息对话框', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
print(reply)
elif text == '显示警告对话框':
QMessageBox.warning(self, '警告', '这是一个警告对话框', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
elif text == '显示错误对话框':
QMessageBox.critical(self, '错误', '这是一个错误对话框', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
elif text == '显示提问对话框':
QMessageBox.question(self, '提问', '这是一个提问对话框', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
if __name__ == '__main__':
app = QApplication(sys.argv)
main = QMessageBoxDemo()
main.show()
sys.exit(app.exec_())
输入对话框
# QInputDialogDemo
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class QInputDialogDemo(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('输入对话框')
self.resize(300, 100)
layout = QFormLayout()
self.button1 = QPushButton('获取列表中的选项')
self.button1.clicked.connect(self.getItem)
self.lineEdit1 = QLineEdit()
layout.addRow(self.button1, self.lineEdit1)
self.button2 = QPushButton('获取列表中的字符串')
self.button2.clicked.connect(self.getText)
self.lineEdit2 = QLineEdit()
layout.addRow(self.button2, self.lineEdit2)
self.button3 = QPushButton('获取列表中的整数')
self.button3.clicked.connect(self.getInt)
self.lineEdit3 = QLineEdit()
layout.addRow(self.button3, self.lineEdit3)
self.setLayout(layout)
def getItem(self):
items = ('C++','python','ruby','java')
item,ok = QInputDialog.getItem(self, '请选择编程语言', '语言列表', items)
if ok and item:
self.lineEdit1.setText(item)
def getText(self):
text,ok = QInputDialog.getText(self, '文本输入框', '输入姓名')
if ok and text:
self.lineEdit2.setText(text)
def getInt(self):
num,ok = QInputDialog.getInt(self, '整数输入框', '输入数字')
if ok and num:
self.lineEdit3.setText(str(num))
if __name__ == '__main__':
app = QApplication(sys.argv)
main = QInputDialogDemo()
main.show()
sys.exit(app.exec_())
字体对话框
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class QFontDialogDemo(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('字体对话框')
layout = QVBoxLayout()
self.fontButton = QPushButton('选择字体')
self.fontButton.clicked.connect(self.getFont)
self.fontLabel = QLabel('Hello')
layout.addWidget(self.fontButton)
layout.addWidget(self.fontLabel)
self.setLayout(layout)
def getFont(self):
font, ok = QFontDialog.getFont()
if ok:
self.fontLabel.setFont(font)
if __name__ == '__main__':
app = QApplication(sys.argv)
main = QFontDialogDemo()
main.show()
sys.exit(app.exec_())
颜色对话框
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class QcolorDialogDemo(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('颜色对话框')
self.resize(300, 100)
layout = QVBoxLayout()
self.colorButton = QPushButton('选择颜色')
self.colorButton.clicked.connect(self.getColor)
self.colorButton1 = QPushButton('设置背景颜色')
self.colorButton1.clicked.connect(self.getBGColor)
self.colorLabel = QLabel('Hello')
layout.addWidget(self.colorButton)
layout.addWidget(self.colorButton1)
layout.addWidget(self.colorLabel)
self.setLayout(layout)
def getColor(self):
color = QColorDialog.getColor()
p = QPalette()
p.setColor(QPalette.WindowText, color)
self.colorLabel.setPalette(p)
def getBGColor(self):
color = QColorDialog.getColor()
p = QPalette()
p.setColor(QPalette.Window, color)
self.colorLabel.setAutoFillBackground(True)
self.colorLabel.setPalette(p)
if __name__ == '__main__':
app = QApplication(sys.argv)
main = QcolorDialogDemo()
main.show()
sys.exit(app.exec_())
文件对话框
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class QFileDialogDemo(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('文件对话框')
self.resize(300, 100)
layout = QVBoxLayout()
self.button1 = QPushButton('加载图片')
self.button1.clicked.connect(self.loadImage)
layout.addWidget(self.button1)
self.imageLabel = QLabel()
layout.addWidget(self.imageLabel)
self.button2 = QPushButton('加载文本文件')
self.button2.clicked.connect(self.loadText)
layout.addWidget(self.button2)
self.contents = QTextEdit()
layout.addWidget(self.contents)
self.setLayout(layout)
def loadImage(self):
fname,_ = QFileDialog.getOpenFileName(self,'打开文件','.','图像文件(*.jpg *.png)')
self.imageLabel.setPixmap(QPixmap(fname))
def loadText(self):
dialog = QFileDialog()
dialog.setFileMode(QFileDialog.AnyFile)
dialog.setFilter(QDir.Files)
if dialog.exec():
filenames = dialog.selectedFiles()
f = open(filenames[0],encoding='utf-8',mode='r')
with f:
data = f.read()
self.contents.setText(data)
if __name__ == '__main__':
app = QApplication(sys.argv)
main = QFileDialogDemo()
main.show()
sys.exit(app.exec_())