在哔哩哔哩中看的教程整理的笔记:视频链接/video/BV1VE411t7kC?p=1
目录
一.水平布局
二.垂直布局
三.Grid 栅格布局
四. form表单布局
五.组合垂直和水平布局
六.绝对布局
七.分割线与间隙
八.控件尺寸的最大值与最小值
九.尺寸策略(sizePolicy)
十.伙伴关系
十一.Tab顺序
十二.信号和槽
十三 . 添加菜单栏与工具栏
十四.使用python代码编写
十五.让主窗口居中显示
十六.点击按钮退出应用程序
十七.屏幕坐标系
十八.设置窗口和应用程序图标
十九.为控件添加提示消息
二十.QLabel控件的基本用法
二十一. QLabel与伙伴控件
二十二.限制QLineEdit控件的输入
二十三.QLineEdit综合案例
二十四.QTextEdit控制输入多行文本
二十五. 按钮控件
二十六.使用QDialog显示通用对话框
二十七.显示不同类型的消息对话框
二十八.显示不同类型的消息对话框
二十九.文件对话框
三十.选项卡控件
三十一.堆栈窗口控件
三十二.停靠控件
三十三.容纳多文档的窗口
一.水平布局
两种方法:
1.选中控件——》右键布局——》水平布局
的horizontal ——》将部件拖进去
设计的ui程序只是设计的,要真正在程序中调用要转换成.py文件
方法三:在pycharm中设置(拓展工具中设置PyUIC,具体设置方法自行查找)
二.垂直布局
三.Grid 栅格布局
N行m列
四. form表单布局
N行两列
左侧一般是标签,右边一般是采集用户输入的
五.组合垂直和水平布局
图中备注为label形式
下面的文本框为line Edit形式
Ctrl+方向键 微调
六.绝对布局
七.分割线与间隙
属性在goemotry中查看
- spacer 添加加空隙
水平的话,先调整为水平布局,将Horizontal spacer拖入水平布局内——》选中间隙,——》spacer中选中sizeType中的Fixed ——》可以设置宽度,垂直的可以设置高度
2. 添加间隔线
在Displace Widgets中的 Vertiacl Line与Horizontal Line
八.控件尺寸的最大值与最小值
minimumsize最小
maximumsize 最大 设置一个控件最大最小的尺寸
九.尺寸策略(sizePolicy)
SizeHint(期望尺寸)
默认尺寸,对于大多数控件来说,SizeHint不可修改,只读。
读取SizeHint的方法如图:
举例:设置如下界面
首先选择一个水平布局——》然后在水平布局左侧添加一个Tree View(Item Views中) ,右侧加一个frame面板(Containers中),——>然后设置为1:1:2的水平比例,——》然后在右侧加入表单布局,form layout,再往form layout中拖动label与line text
十.伙伴关系
两个控件的关联关系
菜单显示时按热键才起作用,相当于另外一种快捷键。
效果:
当键盘输入ait+a 时光标显示在姓名后的文本框,不区分大小写
alt+b光标定位在身份证后
代码也可以实现两个控件的伙伴关系(以后讲)
十一.Tab顺序
按Tab键之后,光标在输入框中的跳转顺序
方法一:右键
方法二:直接点框内数字
十二.信号和槽
信号(signal)与槽(slot)是qt的核心机制,也是Pyqt的核心机制。
信号:是由对象或控件发射出去的消息
按钮的单击事件:当单击按钮时,按钮就会向外部发送单击的消息,这些发送出去的信号需要一些代码来拦截,这些代码就槽。
槽:本质上是一个函数或方法,信号可以理解为事件函数
需要将信号与槽绑定,一个信号可以和多个槽绑定,一个槽可以拦截多个信号
例1:功能:实现点击按钮,关闭窗口
(1)先创建一个按钮,再设置信号/槽
注:
可恢复窗口,即重新编辑(删除控件等操作)
例2:功能:实现输入框的显示与隐藏,以及文本输入框的可用与不可用
效果如下图:
1.首先设置隐藏于显示这两个控件
(1)设计出界面:复选框和文本输入框
(2)修改复选框默认为选中状态
,即默认为
(3)设计信号/槽关系
2.设置这两个控件
(1)设计出界面:复选框和文本输入框
(2)将文本框默认设置为不可用
,即文本输入框显示为灰色
(3)设计信号/槽关系
最终效果如下:
单击(clicked)事件与close方法想关联。
十三 . 添加菜单栏与工具栏
如何创建菜单栏与工具栏,并且往菜单栏和工具栏添加菜单和按钮
1.状态栏
主窗口最下面的状态栏,默认是有的
2.菜单栏
点击菜单栏——》右键移除
3,工具栏
(1)添加工具栏——》右键
(2)打开动作编辑器,选中要放入工具栏的动作,从动作编辑器中拖至工具栏。
效果
十四.使用python代码编写
主窗口的类型:有三种窗口
QMainWindow:可以包含菜单栏、工具栏和标题栏,是最常见的窗口形式
QDialog:是对话窗口的基类。没有菜单栏、工具栏和标题栏
QWidget:不确定窗口的用途,就使用QWidget。
我们一般会使用QMainWindow,在QMainWindow里面使用QDialog,偶尔使用QWidget。
效果:
代码:
'''
面向对象的方式,将所有与ui有关的代码都放进一个类里面,
然后创建一个窗口,只要创建这个类的子类即可
'''
import sys
from import QApplication , QMainWindow
from import QIcon
class FirstMainWin(QMainWindow):
def __init__(self,parent=None):
super(FirstMainWin,self).__init__(parent)
#设置主窗口的标题
("第一个主窗口应用")
#设置窗口的尺寸
(400,300)
= ()
('只存在5秒的消息',5000)
if __name__ == '__main__':
app = QApplication()
#(QIcon('E:/PycharmProjects/doutula/pyqt5_/controls/images/'))
(QIcon('./images/'))
main = FirstMainWin()
()
(app.exec_())
十五.让主窗口居中显示
窗口默认也为居中,因此我认为此节不是很重,但是还是记录一下方法。
#得这整个屏幕的尺寸,和整个窗口的尺寸,然后用整个屏幕的尺寸减去整个窗口的尺寸
import sys
from import QApplication, QMainWindow,QDesktopWidget
from import QIcon
class CenterForm(QMainWindow):
def __init__(self, parent=None):
super(CenterForm, self).__init__(parent)
# 设置主窗口的标题
("让窗口居中")
# 设置窗口的尺寸
(400, 300)
print("初始化")
def center(self):
#获取屏幕坐标系
screen = QDesktopWidget().screenGeometry()
#获取窗口坐标系
size = ()
newLeft = (()-())/2
newTop = (() - ()) / 2
#调用move的方法来移动窗口
(newLeft,newTop)
print("移动窗口")
if __name__ == '__main__':
app = QApplication()
c = CenterForm()
#main = (c) #不调用此函数,窗口依然可以居中
()
(app.exec_())
十六.点击按钮退出应用程序
import sys
from import QPushButton,QHBoxLayout,QWidget,QApplication, QMainWindow,QDesktopWidget
from import QIcon
class QuitApplication(QMainWindow):
#点击按钮,退出应用程序
def __init__(self):
super(QuitApplication, self).__init__()
(300,120)
("退出应用程序")
#添加Button
self.button1 = QPushButton("退出程序")
#将button与槽绑定
self.(self.onClick_Button)
#创建水平布局
layout = QHBoxLayout()
(self.button1) #把button1放在水平布局是哪个
#把水平布局放在主框架上
mainFrame = QWidget() #让充满屏幕
(layout)
(mainFrame) #让主框架放在整个窗口上
#按钮单击事件的方法(自定义的槽)
def onClick_Button(self):
sender = () #通过sender获得button
print(()+ " 按钮被按下") #()是读取按钮上的内容
app = () #得到一个实例
#退出应用程序
()
if __name__ == '__main__':
app = QApplication()
(QIcon('./images/'))
main = QuitApplication()
()
(app.exec_())
点击按钮后,窗口关闭,并且命令行显示
十七.屏幕坐标系
屏幕左上角坐标是(0,0)
工作区高度:窗口高度(不包括标签栏)
标签栏高度:标签栏坐标减去工作区坐标
(300,240) 设置的是工作区的尺寸
注意区分三者坐标的不同,详解见代码注释。
import sys
from import QPushButton,QHBoxLayout,QWidget,QApplication, QMainWindow,QDesktopWidget
from import QIcon
#此例子中使用面向过程的方式,不使用类了
def onClick_Button():
print("含边框的坐标")
print("()= %d" % ()) #含有边框的坐标 250(窗口横坐标)
print("()= %d" % ()) #200(窗口纵坐标)
print("()= %d" % ()) #300(工作区宽度)
print("() = %d" % ())#240(工作区高度)
print("工作区的坐标")
print("().x()= %d" % ().x()) #工作区的坐标系,不包含标题栏 251(工作区横坐标)
print("().y()= %d" % ().y()) #231(工作区纵坐标)
print("().width()= %d" % ().width()) #300(工作区宽度)
print("().height() = %d" % ().height())#240(工作区高度)
print("框架的坐标")
print("().x()= %d" % ().x()) #250(窗口横坐标)
print("().y()= %d" % ().y()) #200(窗口纵坐标)
print("().width()= %d" % ().width()) #302(窗口宽度)
print("().height() = %d" % ().height()) #272(窗口高度 =标题栏高度+工作区高度)
app = QApplication()
widget = QWidget()
btn = QPushButton(widget)
("按钮")
(onClick_Button)
(24,52)
(300,240) #设置工作区的尺寸
(250,200)
("屏幕坐标系")
()
(app.exec_())
点击按钮后输出:
十八.设置窗口和应用程序图标
窗口的setWindowIcon方法用于设置主窗口的图标和应用程序图标,只在Windows可用 QApplication中的setWindowIcon方法也用于设置主窗口的图标和应用程序图标, 但调用了窗口的setWindowIcon方法,QApplication中的setWindowIcon方法就不起作用了 (与老师讲的有些出入,但是还是以运行结果为准)
import sys
from import QApplication, QMainWindow
from import QIcon
'''
窗口的setWindowIcon方法用于设置主窗口的图标和应用程序图标,只在Windows可用
QApplication中的setWindowIcon方法也用于设置主窗口的图标和应用程序图标,
但调用了窗口的setWindowIcon方法,QApplication中的setWindowIcon方法就不起作用了
'''
class IconForm(QMainWindow):
def __init__(self):
super(IconForm, self).__init__()
()
def initUI(self):
(300,300,250,250)
# 设置主窗口的标题
("设置窗口图标")
#设置窗口图标
(QIcon('./images/'))
if __name__ == '__main__':
app = QApplication()
(QIcon('E:/PycharmProjects/doutula/pyqt5_/controls/images/'))
main = IconForm()
()
(app.exec_())
运行结果:
十九.为控件添加提示消息
鼠标放在工作区就会出现提醒信息
#为控件添加提示信息
import sys
from import QHBoxLayout,QWidget,QToolTip,QPushButton,QApplication, QMainWindow
from import QIcon
from import QFont
class TooltipForm(QMainWindow):
def __init__(self):
super().__init__()
()
def initUI(self):
(QFont("SanSerif",12))#设置字体与大小
("今天是<b>星期五</b>") #设置提示信息为粗体
(300,300,400,300)
("设置控件提示消息")
if __name__ == '__main__':
app = QApplication()
(QIcon('./images/'))
main = TooltipForm()
()
(app.exec_())
效果:
#为控件添加提示信息
import sys
from import QHBoxLayout,QWidget,QToolTip,QPushButton,QApplication, QMainWindow
from import QIcon
from import QFont
class TooltipForm(QMainWindow):
def __init__(self):
super().__init__()
()
def initUI(self):
(QFont("SanSerif",12))#设置字体与大小
("今天是<b>星期五</b>") #设置提示信息为粗体
(300,300,400,300)
("设置控件提示消息")
# 添加Button
self.button1 = QPushButton("我的按钮")
self.("这是一个按钮")
# 创建水平布局
layout = QHBoxLayout()
(self.button1) # 把button1放在水平布局是哪个
# 把水平布局放在主框架上
mainFrame = QWidget() # 让充满屏幕
(layout)
(mainFrame) # 让主框架放在整个窗口上
if __name__ == '__main__':
app = QApplication()
(QIcon('./images/'))
main = TooltipForm()
()
(app.exec_())
效果:
二十.QLabel控件的基本用法
setAlignment():设置文本的对齐方式
setIndent(): 设置文本缩进
text(): 获取文本内容
setBuddy(): 设置伙伴关系
setText():设置文本内容
selectText():返回所选择的字符
setWordWrap():设置是否允许换行
'''
setAlignment():设置文本的对齐方式
setIndent(): 设置文本缩进
text(): 获取文本内容
setBuddy(): 设置伙伴关系
setText():设置文本内容
selectText():返回所选择的字符
setWordWrap():设置是否允许换行
QLabel常用的信号(事件):
1.当鼠标滑过QLabel控件时触发:linkHovered
2.当鼠标单击QLabel控件时触发:linkActivated
'''
import sys
from import QLabel,QVBoxLayout,QWidget,QToolTip,QPushButton,QApplication, QMainWindow
from import QIcon
from import QPalette,QPixmap
from import Qt
class QLabelDemo(QWidget):
def __init__(self):
super().__init__()
()
def initUI(self):
#创建label
label1 = QLabel(self)
label2 = QLabel(self)
label3 = QLabel(self)
label4 = QLabel(self)
("<font color = yellow>这是一个文本标签(label1).</font>")
(True) #背景自动填充
palette = QPalette() #填充
(,) #设置label背景颜色
(palette) #调试板
() #设置文字的对齐方式,文本居中对齐
("<a href= '#'>欢迎使用Python (label2)</a>")
()
("这是一个图片标签(label2)")
(QPixmap("./images/"))
#label4,要么触发单击事件,要么链接,只能二者选其一
#如果设为True用浏览器打开网页,如果设为False,调用槽函数
(True)
("<a href= '/'> 感谢使用百度(label4) </a>")
()
("这是一个超级链接")
#垂直布局
vbox = QVBoxLayout()
(label1)
(label2)
(label3)
(label4)
#将linkHovered信号绑定到槽函数上
() #滑过事件
() #单击事件
(vbox) #设置布局
("QLabel控件演示")
def linkHovered(self):
print("当鼠标滑过label2标签时,触发条件")
def linkClicked(self):
print("当鼠标滑过label4标签时,触发条件")
if __name__ == '__main__':
app = QApplication()
(QIcon('./images/'))
main = QLabelDemo()
()
(app.exec_())
效果:
二十一. QLabel与伙伴控件
热键:ALT+()
(控件名,控件位置行索引,控件位置行索引,控件占几行,控件占几列) #栅格布局 mainLayout = QGridLayout(self) (nameLabel,0,0) #(0,0)表示放在一行一列 (nameLineEdit,0,1,1,2)#(0,1,1,2)表示放在第一行的第二列,占1行两列 (passwordLabel,1,0) #(1,0)表示第二行第一列 (passwordLineEdit,1,1,1,2) #(1,1,1,2)表示在第二行的第二列,占一行两列
'''
QLabel与伙伴控件
(控件名,控件位置行索引,控件位置行索引,控件占几行,控件占几列)
'''
from import *
import sys
from import QIcon
class QLabelBuddy(QDialog) :
def __init__(self):
super().__init__()
()
def initUI(self):
("QLabel与伙伴控件")
#创建两个控件
nameLabel = QLabel('&Name',self)
nameLineEdit = QLineEdit(self)
#设置伙伴控件
(nameLineEdit)
#输入密码
passwordLabel = QLabel('&Password', self)
passwordLineEdit = QLineEdit(self)
# 设置伙伴控件
(passwordLineEdit)
#创建按钮
btnOK = QPushButton("&OK")
btnCancel = QPushButton("&Cancel")
#栅格布局
mainLayout = QGridLayout(self)
(nameLabel,0,0) #(0,0)表示放在一行一列
(nameLineEdit,0,1,1,2)#(0,1,1,2)表示放在第一行的第二列,占1行两列
(passwordLabel,1,0) #(1,0)表示第二行第一列
(passwordLineEdit,1,1,1,2) #(1,1,1,2)表示在第二行的第二列,占一行两列
(btnOK,2,1)
(btnCancel,2,2)
if __name__ == '__main__':
app = QApplication()
(QIcon('./images/'))
main = QLabelBuddy()
()
(app.exec_())
#ALT+N,ALT+P
效果:alt+p,alt+n上下跳转
二十二.限制QLineEdit控件的输入
限制QLineEdit控件的输入(校验器)
如限制只能输入整数,浮点数或满足一定条件的字符串
'''
限制QLineEdit控件的输入(校验器)
如现在只能输入整数,浮点数或满足一定条件的字符串
'''
from import QIcon
from import *
from import QIntValidator,QDoubleValidator,QRegExpValidator
from import QRegExp
import sys
class QLineEditValidator(QWidget):
def __init__(self):
super(QLineEditValidator,self).__init__()
("校验器")
()
def initUI(self):
#创建表单布局
formLayout = QFormLayout()
intLineEdit = QLineEdit()
doubleLineEdit = QLineEdit()
validatorLineEdit = QLineEdit()
("整数类型",intLineEdit)
("浮点类型",doubleLineEdit)
("数字和字母",validatorLineEdit)
("整型")
("浮点型")
("数字和字母")
#整型校验器[1,99]
intValidator = QIntValidator(self)
(1,99)
#浮点校验器[-360,360],精度:小数点后两位
doubleValidator = QDoubleValidator(self)
(-360,360)
()
#设置精度,小数点2位
(2)
#字符和数字 ,正则
reg = QRegExp('[a-zA-Z0-9]+$')
validator = QRegExpValidator(self)
(reg)
#设置校验器
(intValidator)
(doubleValidator)
(validator)
(formLayout)
if __name__ == '__main__':
app = QApplication()
(QIcon('./images/'))
main = QLineEditValidator()
()
(app.exec_())
二十三.QLineEdit综合案例
'''
QLineEdit综合案例
'''
from import QIcon
from import *
from import *
from import Qt
import sys
class QLineEditDemo(QWidget):
def __init__(self):
super(QLineEditDemo, self).__init__()
()
def initUI(self):
edit1 = QLineEdit()
#使用int校验器
(QIntValidator())
(4) #不超过9999
()
(QFont("Arial",20))
#浮点数的校验器
edit2 = QLineEdit()
(QDoubleValidator(0.99,99.99,2))
#掩码
edit3 = QLineEdit()
('99_9999_999999;#')
#绑定信号和槽(文本变化时,触发事件)
edit4 = QLineEdit()
()
edit5 = QLineEdit()
()
()
#设置为只读
edit6 = QLineEdit("Hello PyQt5")
(True)
formLayout = QFormLayout()
("整数校验",edit1)
("浮点数校验", edit2)
("Input Mask", edit3)
("文本变化", edit4)
("密码", edit5)
("只读", edit6)
(formLayout)
("QLineEdit综合案例")
def textChanged(self,text):
print('输入的内容:'+ text)
def enterPress(self):
print("已输入值")
if __name__ == '__main__':
app = QApplication()
(QIcon('./images/'))
main = QLineEditDemo()
()
(app.exec_())
效果:
二十四.QTextEdit控制输入多行文本
'''
QTextEdit控件
'''
from import QIcon
from import *
from import QIntValidator,QDoubleValidator,QRegExpValidator
from import QRegExp
import sys
class QTextEditDemo(QWidget):
def __init__(self):
super(QTextEditDemo,self).__init__()
()
def initUI(self):
("QTextEdit控件演示")
(300,320)
= QTextEdit()
= QPushButton("显示文本")
= QPushButton("显示HTML")
= QPushButton("获取文本")
= QPushButton("获取HTML")
layout = QVBoxLayout()
()
()
()
()
()
(layout)
(self.onClick_ButtonToText)
(self.onClick_ButtonToHTML)
(self.onClick_ButtonText)
(self.onClick_ButtonHTML)
def onClick_ButtonText(self):
("Hello World")
def onClick_ButtonHTML(self):
('<font color= "blue" size ="5">Hello World!!! How are you?</font>')
def onClick_ButtonToText(self):
print(())
def onClick_ButtonToHTML(self):
print(())
if __name__ == '__main__':
app = QApplication()
(QIcon('./images/'))
main = QTextEditDemo()
()
(app.exec_())
二十五. 按钮控件
ctrl+鼠标左键选中——》查看该方法的源码
'''
按钮控件(QPushButton)
QAstractButton
QPushButton
AToolButton
QRadioButton
QCheckBox
'''
import sys
from import QIcon
from import *
from import *
from import *
class QPushButtonDemo(QDialog):#对话框
def __init__(self):
super(QPushButtonDemo,self).__init__()
()
def initUI(self):
("QPushButton Demo")
#垂直布局
layout = QVBoxLayout()
self.button1 = QPushButton("第一个按钮")
self.("First Button1")
self.(True)
self.()#设置开关,第一次选中
#让你传两个参数,lambda表达式,硬编码(直接调用whichButton方法)
self.(lambda:(self.button1))
self.()
(self.button1)
#在文本前面显示图像
self.button2 = QPushButton("图像按钮")
self.(QIcon(QPixmap("./images/")))
self.(lambda :(self.button2))
(self.button2)
#设置按钮不可用
self.button3 = QPushButton("不可用的按钮")
self.(False)
(self.button3)
self.button4 = QPushButton('&MyButton')
self.(True)
self.(lambda :(self.button4))
(self.button4)
(layout)
(400,300)
def whichButton(self,btn):
print('被单击的按钮是<' + ()+ '>')
def buttonState(self):
if self.():
print("按钮1已经被选中")
else:
print("按钮1未被选中")
if __name__ == '__main__':
app = QApplication()
(QIcon('./images/'))
main = QPushButtonDemo()
()
(app.exec_())
二十六.使用QDialog显示通用对话框
'''
使用 QDialog显示通用对话框
基类 QDialog,在此基础上有扩展了4个
QMessageBox 消息对话框
QColorDialog 颜色对话框
QFontDialog 字体对话框
QInputDialog 获取用户输入信息的对话框
窗口
QMainWindow
QWidget
QDialog 没有菜单
'''
#主窗口中点击按钮显示对话框
import sys
from import QIcon
from import *
from import *
from import *
class QDialogDemo(QMainWindow):
def __init__(self):
super(QDialogDemo,self).__init__()
()
def initUI(self):
("QDialog案例")
(300,200)
#常见button
= QPushButton(self)
("弹出对话框")
(50,50)
()
def showDialog(self):
dialog = QDialog()
button = QPushButton("确定",dialog)
()
(50,50)
("对话框")
() #设置模式
() #显示对话框
if __name__ == '__main__':
app = QApplication()
(QIcon('./images/'))
main = QDialogDemo()
()
(app.exec_())
效果:
二十七.显示不同类型的消息对话框
'''
显示不同类型的消息对话框
消息对话框:QMessageBox
1.关于对话框
2.错误对话框
3,警告对话框
4.提问对话框
5.消息对话框
有两点差异
1.显示的对话框图标可能不同
2.显示的按钮是不一样的
'''
import sys
from import QIcon
from import *
from import *
from import *
class QMessageBoxDemo(QWidget):
def __init__(self):
super(QMessageBoxDemo,self).__init__()
()
def initUI(self):
("QMessageBox 案例")
(300,400)
#垂直布局
layout = QVBoxLayout()
self.button1 = QPushButton()
self.("显示对话框")
self.()
layout = QVBoxLayout()
#关于对话框
self.button1 = QPushButton()
self.("显示关于对话框")
self.()
#显示消息对话框
self.button2 = QPushButton()
self.("显示消息对话框")
self.() #所有都绑定到一个槽上
#显示警告对话框
self.button3 = QPushButton()
self.("显示警告对话框")
self.()
#显示错误对话框
self.button4 = QPushButton()
self.("显示错误对话框")
self.() # 所有都
#显示提问对话框
self.button5 = QPushButton()
self.("显示提问对话框")
self.() # 所有都
(self.button1)
(self.button2)
(self.button3)
(self.button4)
(self.button5)
(layout)
def showDialog(self):
text = ().text()
if text == "显示关于对话框":
(self,"关于","这是一个关于对话框")
elif text =="显示消息对话框":
reply = (self,"消息","这是一个消息对话框",|,)
print(reply == )
elif text =="显示警告对话框":
(self,"警告","这是一个警告对话框",|,)
elif text == "显示错误对话框":
(self, "错误", "这是一个错误对话框", | , )
elif text =="显示提问对话框":
(self,"提问","这是一个提问对话框",|,)
if __name__ == '__main__':
app = QApplication()
(QIcon('./images/'))
main = QMessageBoxDemo()
()
(app.exec_())
二十八.显示不同类型的消息对话框
'''
输入对话框 :QInputDialog
用来显示输入列表
与计数器控件有关
'''
import sys
from import QIcon
from import *
from import *
from import *
class QInputDialogDemo(QWidget):
def __init__(self):
super(QInputDialogDemo,self).__init__()
()
def initUI(self):
("输入对话框")
#创建表单布局
layout = QFormLayout()
self.button1 = QPushButton("获取列表中的选项")
self.()
self.lineEdit1 = QLineEdit()
(self.button1,self.lineEdit1)
self.button2 = QPushButton("获取字符串")
self.()
self.lineEdit2 = QLineEdit()
(self.button2, self.lineEdit2)
self.button3 = QPushButton("获取整数")
self.()
self.lineEdit3 = QLineEdit()
(self.button3, self.lineEdit3)
(layout)
def getItem(self):
items = ("C","C++","Python","Java","Rudy")
item,ok = (self,"请选择编程语言","语言列表",items)
if ok and item:
self.(item)
def getText(self):
text, ok = (self, "文本输入框", "输入姓名")
if ok and text:
self.(text)
def getInt(self):
num,ok = (self,"整数输入框","输入数字")
if ok and num:
self.(str(num))
if __name__ == '__main__':
app = QApplication()
(QIcon('./images/'))
main = QInputDialogDemo()
()
(app.exec_())
效果:
二十九.文件对话框
'''
文件对话框:QFileDialog
'''
import sys
from import QIcon
from import *
from import *
from import *
class QFileDialogDemo(QWidget):
def __init__(self):
super(QFileDialogDemo,self).__init__()
()
def initUI(self):
#垂直布局
layout = QVBoxLayout()
self.button1 = QPushButton("加载图片")
self.()
(self.button1)
= QLabel()
()
self.button2 = QPushButton("加载文本文件")
self.()
(self.button2)
= QTextEdit()
()
(layout)
("文件对话框演示")
def loadImage(self):
# 选择单个文件
fname, _ = (self, "打开文件", ".", "图像文件(*.jpg *.png)")
(QPixmap(fname))
def loadText(self):
dialog = QFileDialog()
()
()
if ():
filenames = ()
f= open(filenames[0],encoding='utf-8',mode="r")
with f:
data = ()
(data)
if __name__ == '__main__':
app = QApplication()
(QIcon('./images/'))
main = QFileDialogDemo()
()
(app.exec_())
效果:
三十.选项卡控件
'''
选项卡控件:QTabWidget
'''
import sys
from import QIcon
from import *
from import *
from import *
class TabWidgetDemo(QTabWidget):
def __init__(self,parent=None):
super(TabWidgetDemo,self).__init__(parent)
("选项卡控件:QTabWidget")
#创建用于显示控件的窗口
self.tab1 = QWidget()
self.tab2 = QWidget()
self.tab3 = QWidget()
(self.tab1,"选项卡1")
(self.tab2, "选项卡2")
(self.tab3, "选项卡3")
self.tab1UI()
self.tab2UI()
self.tab3UI()
def tab1UI(self):
#表单布局
layout = QFormLayout()
("姓名",QLineEdit())
("地址", QLineEdit())
(0,"联系方式")
self.(layout)
def tab2UI(self):
#水平布局
layout = QFormLayout()
sex = QHBoxLayout()
(QRadioButton("男"))
(QRadioButton("女"))
(QLabel("性别"),sex)
("生日",QLineEdit())
(1,"个人详细信息")
self.(layout)
def tab3UI(self):
#水平布局
layout = QHBoxLayout()
(QLabel("科目"))
(QCheckBox("物理"))
(QCheckBox("高数"))
(2, "教育程度")
self.(layout)
if __name__ == '__main__':
app = QApplication()
(QIcon('./images/'))
main = TabWidgetDemo()
()
(app.exec_())
效果:
三十一.堆栈窗口控件
'''
堆栈窗口控件(QStackeWidget)
'''
import sys
from import QIcon
from import *
from import *
from import *
class QStackeWidgetDemo(QWidget):
def __init__(self):
super(QStackeWidgetDemo,self).__init__()
(300,50,10,10)
("堆栈窗口控件:QStackeWidget")
= QListWidget()
(0,"联系方式")
(1, "个人信息")
(2, "教育程度")
#三个页面
self.stack1 = QWidget() #对于一个页面的窗口
self.stack2 = QWidget()
self.stack3 = QWidget()
self.tab1UI() #通过这三个方法,给每一页添加控件
self.tab2UI()
self.tab3UI()
= QStackedWidget()
(self.stack1) #添加至堆栈中
(self.stack2)
(self.stack3)
hbox = QHBoxLayout()
()
()
(hbox)
()
#通过这个函数来切换索引
def display(self,index):
(index)
def tab1UI(self):
#表单布局
layout = QFormLayout()
("姓名",QLineEdit())
("地址", QLineEdit())
self.(layout)
def tab2UI(self):
#水平布局
layout = QFormLayout()
sex = QHBoxLayout()
(QRadioButton("男"))
(QRadioButton("女"))
(QLabel("性别"),sex)
("生日",QLineEdit())
self.(layout)
def tab3UI(self):
#水平布局
layout = QHBoxLayout()
(QLabel("科目"))
(QCheckBox("物理"))
(QCheckBox("高数"))
self.(layout)
if __name__ == '__main__':
app = QApplication()
(QIcon('./images/'))
main = QStackeWidgetDemo()
()
(app.exec_())
效果:
三十二.停靠控件
'''
停靠部件QDockWidget
'''
import sys
from import QIcon
from import *
from import *
from import *
class DockDemo(QMainWindow):
def __init__(self,parent=None):
super(DockDemo,self).__init__(parent)
("停靠控件:QDockWidget")
layout = QHBoxLayout()
= QDockWidget("Dockable",self)
= QListWidget()
("item1")
("item2")
("item3")
()
(QLineEdit())
(True)
(,)
if __name__ == '__main__':
app = QApplication()
(QIcon('./images/'))
main = DockDemo()
()
(app.exec_())
效果:
三十三.容纳多文档的窗口
'''
容纳多文档的窗口
容纳多文档的 QMdiArea
多文档子窗口类 QMdiSubWindow
将QMdiSubWindow添加至QMdiArea中
'''
import sys
from import QIcon
from import *
from import *
from import *
class MultiDemo(QMainWindow):
count = 0
def __init__(self,parent=None):
super(MultiDemo,self).__init__(parent)
("容纳多文档的窗口")
#层叠,平铺
= QMdiArea()
()
bar = ()
file = ("File")
("New") #新创建窗口
("cascade") #显示方式,层叠
("Tiled")#显示方式,平铺
()
def windowaction(self,q):
print(())
if () == "New":
= +1
sub = QMdiSubWindow()
(QTextEdit())
("子窗口"+str())
(sub)
()
elif () =="cascade":
()
elif () =="Tiled":
()
if __name__ == '__main__':
app = QApplication()
(QIcon('./images/'))
main = MultiDemo()
()
(app.exec_())
效果: