#QRadioButton 单选框
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class RadioButtonDemo(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('QRadioButton')
layout = QHBoxLayout(self) #同一个布局中只有一个radioButton是可以选中的
radioButton1 = QRadioButton('男')
radioButton1.setChecked(True)
radioButton1.toggled.connect(self.radioButtonState) #toggled 记录选中和放开的事件
radioButton2 = QRadioButton('女')
radioButton2.toggled.connect(self.radioButtonState)
layout.addWidget(radioButton1)
layout.addWidget(radioButton2)
def radioButtonState(self):
radioButton = self.sender() #radioButton用于接收传进来的控件
if radioButton.isChecked()==True:
print('<'+radioButton.text()+'>被选中')
else:
print('<'+radioButton.text()+'>被取消选中')
if __name__ == '__main__':
app = QApplication(sys.argv)
main = RadioButtonDemo()
main.show()
sys.exit(app.exec_())
#QCheckBox 复选框 3种状态,未选中 0,选中2,半选中(部分选中)1
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class checkBoxDemo(QWidget):
def __init__(self):
super(checkBoxDemo,self).__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('复选框')
self.resize(300,30)
layout = QHBoxLayout(self)#水平布局 这里要加个self下面就不用再写一句 self.setLayout(layout)了
self.checkBox1 = QCheckBox('游泳')
self.checkBox1.setChecked(True)
self.checkBox1.toggled.connect(self.checkBoxState)
self.checkBox2 = QCheckBox('音乐')
self.checkBox2.toggled.connect(self.checkBoxState)
self.checkBox3 = QCheckBox('王者')
self.checkBox3.setTristate(True) #半选中
self.checkBox3.setCheckState(Qt.PartiallyChecked) #设置半选中状态
self.checkBox3.toggled.connect(self.checkBoxState)
layout.addWidget(self.checkBox1)
layout.addWidget(self.checkBox2)
layout.addWidget(self.checkBox3)
def checkBoxState(self,cb):
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 = checkBoxDemo()
main.show()
sys.exit(app.exec_())
#QComboBox 下拉列表框控件
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class ComboBoxDemo(QWidget):
def __init__(self):
super(ComboBoxDemo,self).__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('下拉列表框')
self.resize(300,100)
layout = QVBoxLayout(self)
self.label = QLabel('选择语言:')
self.cb = QComboBox()
self.cb.addItem('C++') #动态添加项
self.cb.addItem('python')
self.cb.addItem('Java')
self.cb.addItem('C#')
self.cb.currentIndexChanged.connect(self.comboboxChange) #信号是 currentIndexChanged
layout.addWidget(self.label)
layout.addWidget(self.cb)
def comboboxChange(self,i):
print(self.cb.itemText(i)+'被选中')
if __name__ == '__main__':
app = QApplication(sys.argv)
main = ComboBoxDemo()
main.show()
sys.exit(app.exec_())
#滑块控件 QSlider
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class SliderDemo(QWidget):
def __init__(self):
super(SliderDemo,self).__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('滑块控件')
layout = QVBoxLayout(self)
self.label = QLabel('hello world')
self.label.setAlignment(Qt.AlignCenter)
self.slider1 = QSlider(Qt.Horizontal)
#设置开始位置
self.slider1.setMinimum(12)
#设置结束位置
self.slider1.setMaximum(40)
#设置步长
self.slider1.setSingleStep(3)
#设置当前位置
self.slider1.setValue(15)
#设置刻度间隔
self.slider1.setTickInterval(3)
#设置刻度位置(上下左右)
self.slider1.setTickPosition(QSlider.TicksBelow)
#绑定信号和槽
self.slider1.valueChanged.connect(self.sliderChange)
self.slider2 = QSlider(Qt.Vertical)
# 设置开始位置
self.slider2.setMinimum(10)
# 设置结束位置
self.slider2.setMaximum(36)
# 设置步长
self.slider2.setSingleStep(2)
# 设置当前位置
self.slider2.setValue(15)
# 设置刻度间隔
self.slider2.setTickInterval(2)
# 设置刻度位置(上下左右)
self.slider2.setTickPosition(QSlider.TicksRight)
# 绑定信号和槽
self.slider2.valueChanged.connect(self.sliderChange) #信号是valueChanged
layout.addWidget(self.label)
layout.addWidget(self.slider1)
layout.addWidget(self.slider2)
def sliderChange(self):
size = self.sender().value() #这里用self.sender()接收传进来的控件
self.label.setFont(QFont('Arial',size))
if __name__ == '__main__':
app = QApplication(sys.argv)
main = SliderDemo()
main.show()
sys.exit(app.exec_())
#计数器控件 QSpinBox 控制数字增加和减少
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class SpinBoxDemo(QWidget):
def __init__(self):
super(SpinBoxDemo,self).__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('QSpinBox演示')
self.resize(300,100)
layout = QVBoxLayout()
self.label = QLabel('当前值:')
self.label.setAlignment(Qt.AlignCenter)
self.sb = QSpinBox()
layout.addWidget(self.label)
layout.addWidget(self.sb)
self.sb.setValue(12) #初始值
self.sb.setSingleStep(2) #步长
self.sb.setMaximum(20) #最大
self.sb.valueChanged.connect(self.valueChange) #绑定信号和槽
self.setLayout(layout)
def valueChange(self):
self.label.setText('当前值:'+str(self.sb.value()))
if __name__ == '__main__':
app = QApplication(sys.argv)
main = SpinBoxDemo()
main.show()
sys.exit(app.exec_())
#对话框 QDialog
#QMessageBox 弹框
#QColorDialog 显示颜色对话框
#QFileDialog 打开文件对话框
#QFontDialog 选择字体对话框
#QInputDialog 输入文本对话框
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class QDialogDemo(QMainWindow): #这里用的QMainWindow
def __init__(self):
super(QDialogDemo,self).__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('QSpinBox演示')
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_())
#各种不同类型消息对话框:关于,信息,警告,错误,问题(确认?)
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class QMessageBoxDemo(QWidget):
def __init__(self):
super(QMessageBoxDemo,self).__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('QMessageBox演示')
self.resize(300,200)
layout = QVBoxLayout(self)
self.button1 = QPushButton() #about dialog
self.button1.move(50,50)
self.button1.setText('about')
self.button1.clicked.connect(self.showDialog)
self.button2 = QPushButton() #show info dialog
self.button2.setText('showInfo')
self.button2.clicked.connect(self.showDialog)
self.button3 = QPushButton() # show warning dialog
self.button3.setText('showWarning')
self.button3.clicked.connect(self.showDialog)
self.button4 = QPushButton() # show error dialog
self.button4.setText('showError')
self.button4.clicked.connect(self.showDialog)
self.button5 = QPushButton() # show question dialog
self.button5.setText('showQuestion')
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)
def showDialog(self):
text = self.sender().text()
if text == 'about':
QMessageBox.about(self,'about','this is an about dialog')
elif text =='showInfo':
reply = QMessageBox.information(self,'info','this is an info dialog',QMessageBox.Yes|QMessageBox.No,QMessageBox.Yes)
print(reply)
elif text == 'showWarning':
QMessageBox.warning(self,'warning','this is a warning',QMessageBox.Yes|QMessageBox.No,QMessageBox.Yes)
elif text == 'showError':
QMessageBox.critical(self,'error','this is a error',QMessageBox.Yes|QMessageBox.No,QMessageBox.Yes)
elif text == 'showQuestion':
QMessageBox.question(self,'question','this is a question',QMessageBox.Yes|QMessageBox.No,QMessageBox.Yes)
if __name__ == '__main__':
app = QApplication(sys.argv)
main = QMessageBoxDemo()
main.show()
sys.exit(app.exec_())