pyqt5 窗体布局
窗体布局
1使用qtdesigner新建一个对话框,然后拖放几个按钮和文本框,按钮使用水平布局,效果如下:

鼠标选中水平布局再选中文本框,进行垂直布局,如下:

垂直布局后的效果如下:

然后,如何让窗体中的控件随着窗体大小的变化而变化大小呢?这个时候就要用到顶层布局了,使用网格布局,在窗体空白处点击右键,如下:

布局后的效果:

到此,布局就完成了,试着拖动一下窗体大小,看看里面的控件大小是否随之变化。
下面来熟悉一个重要属性:
点击文本框,在属性栏中找到如下属性:

水平策略和垂直策略用来表示控件缩放的,说明如下:
Fixed: 当前大小是最合适的,不能改变
Minimum: 当前大小已经是最小, 不能再缩小了, 但可以放大。
Maximum: 当前大小已经是最大, 不能再放大了,但可以缩小。
Preferred: 这个感觉不好用,不会用
Expanding: 可以增大或者缩小。在上面例子中文本框的水平和垂直策略就是expanding
需要注意的问题:在窗体中布局后,打开对象查看器,最顶层的对象不是Form,而是QWidget

在我们的界面逻辑类中需要将原来的代码做出相应的修改,如下:
class SimpleDialogForm(Ui_Form, QtWidgets.QMainWindow):改为
class SimpleDialogForm(Ui_Form, QtWidgets.QWidget):
2界面设计完成后,需要绑定信号和槽,有两种设计方法,第一种是在qtdesigner中将所有用到的按钮事件全部绑定,然后在界面逻辑类中覆写槽方法。第二种是在QtDesigner中仅将与系统事件相关的信号绑定(比如关闭事件)。在此我们使用第二种方法。
进入信号和槽的编辑界面,操作方法如下:

在编辑界面中,点击close按钮,拖动到窗体空白处,弹出的窗体中,选择close事件,此时按钮的click事件就会执行窗体的close方法。

到此完成了窗体的设计,还有一个问题
使用pyuic5 simpleDialog.py > ui_simpledialog.py 命令完成窗体逻辑类的代码生成。
在我们自己编写的窗体逻辑类中,绑定打开和保存的按钮信号,并且覆写窗体的关闭事件,我们需要在窗体关闭时,弹出一个确认对话框。
代码如下:
from PyQt5 import QtCore, QtGui, QtWidgets
from ui_simpledialog import Ui_Form
import sys
import os
import codecs
class SimpleDialogForm(Ui_Form, QtWidgets.QWidget):
def __init__(self, parent = None):
super(SimpleDialogForm, self).__init__()
self.setupUi(self)
#binding slot
self.btnOpen.clicked.connect(self.openFile)
self.btnSaveas.clicked.connect(self.saveasFile)
def openFile(self):
fd = QtWidgets.QFileDialog(self)
fileName,filetype = fd.getOpenFileName(caption = "open txt file", directory = 'd:/',filter = "Text Files (*.txt)")
if os.path.exists(fileName):
with codecs.open(fileName,"r","utf-8") as f:
txt = f.read()
self.textEdit.setText(txt)
print(filetype)
def saveasFile(self):
fd = QtWidgets.QFileDialog(self)
fileName,fileType = fd.getSaveFileName(caption = 'save a file as ', directory = '',filter = "Text Files (*.txt)")
if fileName == '':
return
with codecs.open(fileName,'w','utf-8') as f:
f.write(self.textEdit.toPlainText())
pass
'''override windows close event, we need a query messagebox'''
def closeEvent(self, event):
result = QtWidgets.QMessageBox.question(self, "Confirm Exit...",
"Are you sure you want to exit ?", QtWidgets.QMessageBox.Yes| QtWidgets.QMessageBox.No)
event.ignore()
if result == QtWidgets.QMessageBox.Yes:
event.accept()
pass
def yourFunctions(self):
pass
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
main = SimpleDialogForm()
main.show()
sys.exit(app.exec_())
几处要说明的地方:
1文件的读取写入,一定要指明编码格式。
2文件的操作最好放在with语句块中,完成之后python自动关闭
3浏览对话框的几个参数要记住:
fd.getOpenFileName(caption = "open txt file", directory = 'd:/',filter = "Text Files (*.txt)")
记不住的话就在python idle中使用help命令自己查。
4为了不让自己被编码格式搞蒙,请使用codecs模块(它可以处理现在任意编码的字符)。
到此,一个完整的窗体就完成了。
其实直接使用example中的例子就行,稍微改改,一个窗体就很完美了。
pyqt5 窗体布局的更多相关文章
- C#入门经典(2-重置窗体布局,界面介绍,错误列表)
- c#学习笔记之使用 TableLayoutPanel 控件设置窗体布局
使用 TableLayoutPanel 控件设置窗体布局 在 Visual Studio IDE 左侧,找到“工具箱”选项卡. 选择“工具箱”选项卡,随即将显示工具箱.(或者,在菜单栏上,依次选择“视 ...
- winform窗体——布局方式
一.默认布局 ★可以加panel,也可以不加: ★通过鼠标拖动控件的方式,根据自己的想法布局.拖动控件的过程中,会有对齐的线,方便操作: ★也可选中要布局的控件,在工具栏中有对齐工具可供选择,也有调整 ...
- Qt 窗体布局 good
布局相关对象及简介 窗体上的所有的控件必须有一个合适的尺寸和位置.Qt提供了一些类负责排列窗体上的控件,主要有:QHBoxLayout,QVBoxLayout,QGridLayout,QStackLa ...
- EasyUI Dialog 窗体 布局记要
通常在窗体里放置的都是表单,或者使用分栏(Tab)来陈列信息也是非常的好用.在这里特别记录一下在窗体里同时放置表单和表格的设计思路. 仅放置一个表单 通常 Dialog 里只放一个表单,而且表单的行数 ...
- PyQt5之布局管理
目录 一 写在开头 1.1 本文内容 二 绝对布局 三 布局类 3.1 水平布局(QHBoxLayout)和垂直布局(QVBoxLayout) 3.2 水平布局和垂直布局实例 3.3 网格布局(QGr ...
- PyQt5教程——布局管理(4)
PyQt5中的布局管理 布局管理是GUI编程中的一个重要方面.布局管理是一种如何在应用窗口上防止组件的一种方法.我们可以通过两种基础方式来管理布局.我们可以使用绝对定位和布局类. 绝对定位 程序指定了 ...
- Winform中使用控件的Dock属性设计窗体布局,使不随窗体缩放而改变
场景 在新建一个Winform窗体后,拖拽控件设置其布局如下 如果只是单纯的这么设计,我们在运行后,如果对窗口进行缩放就会导致如下 所以我们需要在设计页面布局时对控件进行定位设置. 注: 博客主页:h ...
- PyQT5堆叠布局:切换界面(QStackedLayout)
几乎所有的GUI界面都需要用到这个场景:在一个界面里面,点击不同的按钮显示不同的内容 在Qt设计师中没有堆叠布局,需要我们手动添加 在Qt设计师中,设计3个切换的页面,和一个主界面. 注意在主界面是两 ...
随机推荐
- jvm内存GC详解
一.相关概念 a. 基本回收算法 1. 引用计数(Reference Counting) 比较古老的回收算法.原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数.垃圾回收时,只用收 ...
- SEO为什么要求网页设计师用DIV+CSS布局网页?
问:SEO为什么要求网页设计师用DIV+CSS布局网页? 答:通常情况下,SEOer非常喜欢把一个网站做到最细节,在网页设计方面,有时与设计师沟通时,通常会问到:SEO为什么要求网页设计师用DIV+C ...
- Kerberos认证流程详解
Kerberos是诞生于上个世纪90年代的计算机认证协议,被广泛应用于各大操作系统和Hadoop生态系统中.了解Kerberos认证的流程将有助于解决Hadoop集群中的安全配置过程中的问题.为此,本 ...
- 20169210《Linux内核原理与分析》第七周作业
第一部分:实验 首先还是网易云课堂的实验内容,扒开系统调用的三层皮(下),分为两部分: 1.给MenuOS增加time和time-asm命令 2.系统调用在内核代码中的处理过程 给MenuOS增加ti ...
- WebSocket与Tcp连接
最近做了一个项目,客户端为WebSocket页面,服务器端为Tcp控制台 .将代码贴出来,供需要的参考. 1.服务器端代码 其中服务器的Session使用了第三方插件,为TCP连接. 2.客户端代码如 ...
- 【MongoDB】The Access control of mongodb
In this blog we mainly talk about the access control including limitation of ip, setting listen port ...
- webbrowser selstart selLength
附件:http://files.cnblogs.com/xe2011/Webbrowser_SelStart.rar 1 获得webBrowser光标所在的位置 2 设置webBrowser光标的位置 ...
- Gstreamer 数据流线程(GstTask / GstTaskPool)分析
作者:fengcc 原创文章 转载请注明出处 GStreamer 是一个基于流水线的多媒体框架,基于 GObject,以 C 语言写成. 凭借 GStreamer,程序员可以很容易地创建各种多媒体功能 ...
- VS2015+TFS2015源代码管理
使用Visual Studio连接TFS
- Razor的理解
[原创]Razor非常智能非常实用,不了解的人可能会觉得有没有都无所谓,其实不然,起初对Razor不是太了解,现在想想Razor就是来标示出C#语法的,但是HTML和C#混合输出时到底@这个小老鼠到底 ...