文章目录
本章将主要介绍窗体
MainWindow
控件的属性设置,例如控件名称、菜单栏、状态栏、工具栏等,本章节是在
窗体MainWindow的属性设置2基础上继续介绍。
1.窗体设置成不可伸缩
在使用PyQt5
创建图形用户界面(GUI
)时,有时你可能希望窗口的尺寸保持固定,不允许用户通过拖动窗口边缘来改变窗口的大小。这可以通过设置窗口的布局和对话框的大小策略来实现,确保你的窗口在显示时保持一个固定的尺寸。这种方式有几个作用和概念:
作用:
用户体验一致性:固定窗口尺寸可以确保用户在使用应用程序时获得一致的体验,避免窗口尺寸的变化影响布局和功能。
避免布局混乱:特别是在设计复杂界面时,动态改变窗口大小可能导致布局问题,从而影响控件的可见性和可用性。
节省开发时间:限制窗口大小后,开发者可以专注于设计一个特定尺寸的布局,而不用考虑在不同尺寸下的表现。
美观和实用:有些应用的用户界面设计是为特定尺寸量身定制的,不可缩放的窗口可以确保布局的美观性不会因用户操作而改变。
如何实现呢?可以从ui
界面修改也可以从py
文件修改。
(1)ui界面
gepmetry
后面现实的363×348
就是界面的大小,这时候首先要把界面可伸展的最大最小值设成与窗口一样:
同时需要把sizePolicy
的水平策略和垂直策略设置为Fixe
d
(2)py文件
新增的MainWindow.resize(561, 283)
告诉我们界面的大小是多少,我们把它改成
MainWindow.setFixedSize(561, 283)`
例:
原始文件 | 修改文件 |
---|---|
MainWindow.reSize(1700, 800) |
MainWindow.setFixedSize(1700, 800) |
原始文件:
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.reSize(1700, 800)
修改文件:
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.setFixedSize(1700, 800)
2.禁用最大最小化
在使用 PyQt5
开发图形用户界面(GUI
)应用程序时,有时可能希望禁用窗口的最大化和最小化功能。这通常是为了确保用户专注于应用程序的主要内容,而不会意外地改变窗口大小或位置。
在 PyQt5
中,可以通过设置窗口的状态或窗口标志来实现这一点。
from PyQt5.QtCore import Qt
self.setWindowFlags(Qt.WindowCloseButtonHint)
效果:
禁用最大化
仍然显示最大化按钮只是不可用
self.setWindowFlags(Qt.WindowMinimizeButtonHint| Qt.WindowCloseButtonHint)
禁用最大最小化 | 禁用最大化 |
---|---|
Qt.WindowCloseButtonHint |
`Qt.WindowMinimizeButtonHint |
3.窗口居中显示
在PyQt5
中,窗口居中显示通常是为了提高用户体验,使界面在视觉上更为平衡和美观。居中显示的窗口能够吸引用户的注意力,使其更容易集中在界面上的操作。同时,居中显示还可以避免因窗口偏移而导致的用户操作不便。
窗口居中显示的实现概念
获取屏幕尺寸:通过获取屏幕的分辨率,确定可用的显示区域。
获取窗口尺寸:通过获取当前窗口的宽度和高度,确定其占据的空间。
计算位置:通过简单的数学运算,计算出窗口左上角的坐标,使其居中显示。
设置窗口位置:使用PyQt5提供的 API 将窗口移动到计算出的位置。
from PyQt5.QtWidgets import QDesktopWidget
self.center()
def center(self):
screen_size = QDesktopWidget().screenGeometry()
self.move(int((screen_size.width()-self.width())/2), int((screen_size.height()-self.height())/2))
4.窗口始终保持最前方显示
在使用 PyQt5
创建图形用户界面(GUI
)时,有时我们希望窗口始终保持在最前方,以便用户能够轻松地访问它。在 PyQt5
中,可以通过调用 setWindowFlag()
方法来实现这一点。具体来说,我们可以使用 Qt.WindowStaysOnTopHint
标志。
self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
5.子菜单功能
(1)退出界面
self.actionexit.triggered.connect(self.winclose)
def winclose(self):
MainWindow.close()
注:尽量避免定义函数与函数名相同(由于函数体与调用函数名字一样,可能会导致循环调用报错)
错误实例:
def close(self):
MainWindow.close()
(2)最小化界面
self.min_win.clicked.connect(self.min_winow)
def min_winow(self):
self.showMinimized()
6.打开弹窗不显示具体控件
在PyQt5
中,弹窗是一个对话框或小窗口,常用于与用户进行简单的交互,如显示消息、获取输入或确认操作。打开弹窗并不显示具体控件可能是由于几个原因。下面是一些概念和作用的解释,以及可能遇到的常见问题及解决方案。
概念和作用:
弹窗(Dialog
): 用于与用户交互的窗口,通常包含按钮、文本框、标签等控件。
控件: UI
组件,例如按钮(QPushButton
)、文本框(QLineEdit
)、标签(QLabel
)等,用于交互和数据显示。
布局(Layout
): 控件的组织方式,如垂直布局(QVBoxLayout
)、水平布局(QHBoxLayout
)等,用于控制控件的排列。
添加以下语句:
def __init__(self):
super(Ui_Form,self).__init__()
self.setupUi(self)
self.retranslateUi(self)
7.无边框界面实现可拖拽
在PyQt5
中,实现无边框窗口并支持拖拽移动的功能需要结合事件处理。无边框窗口通常用于自定义界面,例如游戏界面或其他应用程序,以获得更大的灵活性和不同于传统窗口的外观。
只需要直接把两个函数复制粘贴不需要调用,这两个函数是原本自带的只不过是重写一遍
from PyQt5.QtCore import Qt
self.setWindowFlag(Qt.FramelessWindowHint)
self.offset = None # 初始化偏移量
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.offset = event.pos()
def mouseMoveEvent(self, event):
if event.buttons() == Qt.LeftButton:
self.move(event.globalPos() - self.offset)
一个按键实现界面拖拽
from PyQt5.QtCore import Qt
self.setWindowFlag(Qt.FramelessWindowHint)
self.btn_move.clicked.connect(self.winmove)
self.offset = QPoint(0, 0)
def winmove(self):
self.mouseMoveEvent()
def mouseMoveEvent(self, event):
if event.buttons() == Qt.LeftButton:
self.move(event.globalPos() - self.offset)
8.删除指定控件
tanwin.lay_out = tanwin.layout()
delete_label = tanwin.findChild(QtWidgets.QLabel, 'label1')
tanwin.lay_out.removeWidget(delete_label)
delete_label.deleteLater()