效果图:
导航:
水平布局
网格布局
垂直布局
使用lable设置图片
radiobutton的使用
1水平布局
首先创建了一个QGroupBox,将三个按钮放在这个组件里
self.groupBox = QGroupBox(‘there are some buttons’)
然后创建一个水平布局对象
hboxlayout = QHBoxLayout()
按钮的创建及设置
button1 = QPushButton(‘enter’,self)
button1.setToolTip(‘button1’)
button1.setIconSize(QtCore.QSize(40,25))
将设置好的按钮放入这个水平布局中
hboxlayout.addWidget(button1)
创建多个按钮并执行同样的操作
可以将水平布局对象理解为一个窗口(widget),不过这个窗口是内嵌在主窗口中的.
最后将这个水平布局 hboxlayout 添加到 GroupBox中
#创建一个包含三个按钮的groupBox组件,并设置这个组件里的元素为水平布局(VBoxLayout)
def craetLayoyt(self):
self.groupBox = QGroupBox('there are some buttons')
hboxlayout = QHBoxLayout()
button1 = QPushButton('enter',self)
button1.setToolTip('button1')
button1.setIconSize(QtCore.QSize(40,25))
hboxlayout.addWidget(button1)
button2 = QPushButton('cancle', self)
button2.setToolTip('button2')
button2.setIconSize(QtCore.QSize(40, 25))
hboxlayout.addWidget(button2)
button3 = QPushButton('back', self)
button3.setToolTip('button3')
button3.setIconSize(QtCore.QSize(40, 25))
hboxlayout.addWidget(button3)
self.groupBox.setLayout(hboxlayout)
完成上述工作后,需要把你的creatLayout添加到主窗口初始化
def initWindow(self):
self.setWindowTitle(self.title)
self.setWindowIcon(QtGui.QIcon(self.iconname))
self.setGeometry(self.left,self.top,self.width,self.height)
self.craetLayoyt()
self.createGridLayout()
self.createMylable()
self.myLableImg()
self.myradiobutton()
self.lable = QLabel('hello')#底部显示选中的状态
#主窗口的布局是垂直排列的
vbox = QVBoxLayout()
vbox.addWidget(self.groupBox)
vbox.addWidget(self.groupBox2)
vbox.addWidget(self.groupBox3)
vbox.addWidget(self.groupBox4)
vbox.addWidget(self.groupBox5)
vbox.addWidget(self.lable)
self.setLayout(vbox)
2.网格布局
使用方法同水平布局一样
不同的是:将按钮或图片添加到布局中的时候,要设置按钮或图片的位置
gridlayout.addWidget(lableimg1,0,0)
参数0,0表示第一行第一个
如果参数是0.4,表示第一行的第五个位置,中间未指定的就空白留出
#用lable添加一张图片
def myLableImg(self):
self.groupBox4 = QGroupBox('this is a lable contain a img')
gridlayout = QGridLayout()
lableimg1 = QLabel(self)
pixmap = QPixmap('python.png')
lableimg1.setPixmap(pixmap)
gridlayout.addWidget(lableimg1,0,0)
lableimg1 = QLabel(self)
pixmap = QPixmap('logo.png')
lableimg1.setPixmap(pixmap)
gridlayout.addWidget(lableimg1,0,1)
lableimg1 = QLabel(self)
pixmap = QPixmap('ball.png')
lableimg1.setPixmap(pixmap)
gridlayout.addWidget(lableimg1,1,0)
lableimg1 = QLabel(self)
pixmap = QPixmap('qiuyi.png')
lableimg1.setPixmap(pixmap)
gridlayout.addWidget(lableimg1,1,1)
self.groupBox4.setLayout(gridlayout)
3.垂直布局
使用方法同水平布局一样
4.添加图片到lable中
需要导入
import QPixmap
lableimg1 = QLabel(self)
pixmap = QPixmap('python.png')
lableimg1.setPixmap(pixmap)
gridlayout.addWidget(lableimg1,0,0)
5.源码:
import sys
from PyQt5 import QtGui,QtCore
from PyQt5.QtWidgets import QApplication, QPushButton, QMainWindow, QDialog, QGroupBox, QHBoxLayout, QVBoxLayout, \
QGridLayout, QLabel, QRadioButton
from PyQt5.QtGui import QPixmap
import time
class window(QDialog):
def __init__(self):
super(window,self).__init__()
self.title = 'pyqt5'
self.left = 500
self.top = 200
self.width = 300
self.height = 250
self.iconname = 'python.png'
self.initWindow()
def initWindow(self):
self.setWindowTitle(self.title)
self.setWindowIcon(QtGui.QIcon(self.iconname))
self.setGeometry(self.left,self.top,self.width,self.height)
self.craetLayoyt()
self.createGridLayout()
self.createMylable()
self.myLableImg()
self.myradiobutton()
self.lable = QLabel('hello')#底部显示选中的状态
vbox = QVBoxLayout()
vbox.addWidget(self.groupBox)
vbox.addWidget(self.groupBox2)
vbox.addWidget(self.groupBox3)
vbox.addWidget(self.groupBox4)
vbox.addWidget(self.groupBox5)
vbox.addWidget(self.lable)
self.setLayout(vbox)
#创建一个包含三个按钮的groupBox组件,并设置这个组件里的元素为水平布局(VBoxLayout)
def craetLayoyt(self):
self.groupBox = QGroupBox('there are some buttons')
hboxlayout = QHBoxLayout()
button1 = QPushButton('enter',self)
button1.setToolTip('button1')
button1.setIconSize(QtCore.QSize(40,25))
hboxlayout.addWidget(button1)
button2 = QPushButton('cancle', self)
button2.setToolTip('button2')
button2.setIconSize(QtCore.QSize(40, 25))
hboxlayout.addWidget(button2)
button3 = QPushButton('back', self)
button3.setToolTip('button3')
button3.setIconSize(QtCore.QSize(40, 25))
hboxlayout.addWidget(button3)
self.groupBox.setLayout(hboxlayout)
#创建包含四个组建的网格布局
def createGridLayout(self):
self.groupBox2 = QGroupBox('there are some buttons in a gridLayout')
gridLayout = QGridLayout()
button1 = QPushButton('enter',self)
button1.setToolTip('button1')
button1.setIconSize(QtCore.QSize(40,25))
gridLayout.addWidget(button1,0,0)
button2 = QPushButton('cancle', self)
button2.setToolTip('button2')
button2.setIconSize(QtCore.QSize(40, 25))
gridLayout.addWidget(button2,0,1)
button3 = QPushButton('back', self)
button3.setToolTip('button3')
button3.setIconSize(QtCore.QSize(40, 25))
gridLayout.addWidget(button3,1,0)
lable = QLabel('hello world')
gridLayout.addWidget(lable,1,1)
self.groupBox2.setLayout(gridLayout)
#lable的创建,以及lable样式表
def createMylable(self):
self.groupBox3 = QGroupBox('there are some lables')
vboxlayout = QVBoxLayout()
lable1 = QLabel('today is tuesday')
vboxlayout.addWidget(lable1)
lable2 = QLabel('yestaday is tuesday')
lable2.setFont(QtGui.QFont('Sanserif',20))
lable2.setStyleSheet('color:red')
vboxlayout.addWidget(lable2)
lable3 = QLabel('tommorry is tuesday')
vboxlayout.addWidget(lable3)
self.groupBox3.setLayout(vboxlayout)
#用lable添加一张图片
def myLableImg(self):
self.groupBox4 = QGroupBox('this is a lable contain a img')
gridlayout = QGridLayout()
lableimg1 = QLabel(self)
pixmap = QPixmap('python.png')
lableimg1.setPixmap(pixmap)
gridlayout.addWidget(lableimg1,0,0)
lableimg1 = QLabel(self)
pixmap = QPixmap('logo.png')
lableimg1.setPixmap(pixmap)
gridlayout.addWidget(lableimg1,0,1)
lableimg1 = QLabel(self)
pixmap = QPixmap('ball.png')
lableimg1.setPixmap(pixmap)
gridlayout.addWidget(lableimg1,1,0)
lableimg1 = QLabel(self)
pixmap = QPixmap('qiuyi.png')
lableimg1.setPixmap(pixmap)
gridlayout.addWidget(lableimg1,1,1)
self.groupBox4.setLayout(gridlayout)
#radiobutton的使用
def myradiobutton(self):
self.groupBox5 = QGroupBox('there are some radiobuttons in a vboxlayout::which is your favourit programming language')
self.groupBox5.setStyleSheet('color:red')
self.groupBox5.setFont(QtGui.QFont('Sanserif',21))
vboxlayout = QVBoxLayout()
radiobtn1 = QRadioButton('python')
radiobtn1.setChecked(True)#默认选中
radiobtn1.setIcon(QtGui.QIcon('google.png'))
radiobtn1.setIconSize(QtCore.QSize(25,25))
radiobtn1.setFont(QtGui.QFont('Sanserif',16))
radiobtn1.toggled.connect(self.onclickradiobtn)#添加槽
vboxlayout.addWidget(radiobtn1)
radiobtn2 = QRadioButton('c++')
radiobtn2.setIcon(QtGui.QIcon('firefox.png'))
radiobtn2.setIconSize(QtCore.QSize(25,25))
radiobtn2.toggled.connect(self.onclickradiobtn)
vboxlayout.addWidget(radiobtn2)
radiobtn3 = QRadioButton('java')
radiobtn3.setIcon(QtGui.QIcon('opera.png'))
radiobtn3.setIconSize(QtCore.QSize(25,25))
radiobtn3.toggled.connect(self.onclickradiobtn)
vboxlayout.addWidget(radiobtn3)
self.groupBox5.setLayout(vboxlayout)
#设置radiobutton的点击事件
def onclickradiobtn(self):
radioBtn = self.sender()
if radioBtn.isChecked():
self.lable.setText('you have selected'+radioBtn.text())
if __name__ == '__main__':
app = QApplication(sys.argv)
window = window()
window.show()
app.exit(app.exec_())