文章目录
本章是在 窗体MainWindow的属性设置后第二篇关于PyQt5的控件以及属性介绍,主要介绍编辑Tab次序、编辑信号与槽、新增界面的方法;这些界面或者代码层次都是可以实现的,不过本章基于designer.exe界面进行编辑。
1.编辑Tab次序
什么是Tab
次序?
Tab
次序是指在用户按下Tab
键时,焦点在各个控件之间的切换顺序。在GUI应用中,用户通常使用Tab
键来快速移动焦点,所以合理的Tab次序能够提升用户的使用效率。
为什么需要编辑Tab
次序?
1.提高可用性:合理的Tab
次序能够使用户更直观地使用应用程序,尤其是在表单输入等场景中。用户希望在按Tab键时能够按照逻辑顺序访问控件。
2.无障碍访问:对于依赖键盘导航的辅助技术用户,合理的Tab
次序是必需的,以确保他们能够顺利使用应用程序。
3.界面一致性:合理的Tab
次序使得界面的操作更加一致,增加了应用程序的专业性和可维护性。
①从Edit
选中编辑Tab
顺序:
②主界面显示数字表示我们按Tab键时光标跳动的顺序;修改顺序依次点击
③退出编辑Tab次序,只需点击编辑窗口控件按钮:
2.编辑信号与槽
什么是信号与槽?
信号与槽是Qt
框架中的一种事件处理机制。信号是对象状态变化时发出的通知,而槽是对这些通知的反应函数。通过这种机制,可以实现对用户操作(如按钮点击、文本变化等)的响应。
为什么需要编辑信号与槽?
1.实现交互功能:通过连接信号和槽,可以让不同的控件之间进行交互,比如按钮点击后更新文本框的内容,或者在选项改变时更新其他控件的状态。
2.解耦设计:信号与槽提供了一种松耦合的事件处理方式,使得程序的各个部分可以独立开发与测试,提高了代码的可维护性。
3.灵活性:信号与槽机制允许动态的连接与断开,使得在运行时也可以调整控件之间的行为。
4.增强可读性:使用信号与槽可以使得事件处理逻辑更加清晰,通过查看信号和槽的连接,开发者可以更容易理解应用程序的工作流程。
(1)同个界面
A.拖拽
①从Edit选中编辑信号/槽:
②主界面切换到编辑信号/槽格式:
③例如:
选中pushButton
作为发射者,拖住不动会有一个下三角标志:
移到TextLabel
上将其作为接收者,会弹出“配置连接”窗口:
在“配置连接”窗口左右两侧选择对应的信号,这里按钮选择单击clicked()
,标签选择隐藏hide()
:
这样就实现了单机按钮,标签隐藏的作用。
完成配置连接后,退出编辑信号/槽界面,只需点击编辑窗口控件按钮:
未点击按钮前:
点击按钮后:
B.使用信号/槽编辑器
①在界面右下方“信号/槽编辑器”选项卡:
②点击上方的绿色加号实现添加信号/槽,点击上方的红色减号实现添加信号/槽:
③信号是指发送者的动作,槽是指接收者的动作。
例:设置点击“清空”按钮后可以将姓名、性别、专业后面的编辑框内容清空
预览:
文本编辑框未输入内容:
文本编辑框输入内容:
点击“清空”按钮:
(2)不同界面
1.发送界面
from PyQt5.QtCore import pyqtSignal
class Ui_Form(QtWidgets.QMainWindow):
signal = pyqtSignal(int) ####
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(400, 95)
self.lineEdit.editingFinished.connect(self.emit_signal) ####
def emit_signal(self): ####
dataint = int(self.lineEdit.text())
self.signal.emit(dataint)
2.接收界面(主界面)
window1.show()
window1.signal.connect(self.zifuhouyi_weishu_2)
def zifuhouyi_weishu_2(self,dataint):
global zifu
n=dataint
注:显示哪个界面,哪个界面后接signal
检测另一界面关闭
主界面:
tanwin.closed.connect(self.tanwin_delete)
另一界面(重写closeEvent函数):
class tanchuang_win(QMainWindow,window2):
closed = pyqtSignal()
def closeEvent(self, event):
self.closed.emit()
event.accept()
3.新增界面
(1)第一种方法
①生成的Form文件显示的是:
class Ui_Form(object):
def setupUi(self, Form):
将object
改成QtWidgets.QMainWindow
②在main文件中引用:
from message_dpi import Ui_Form
if __name__ == '__main__':
app = QApplication(sys.argv)
mywin = Window()
dpi_window=Ui_Form()
mywin.show()
sys.exit(app.exec_())
(2)第二种方法
不更改生成的Form
文件,只在main
文件中新创一个类
from message_dpi import Ui_Form
class dpi_Window(Ui_Form,QMainWindow):
def __init__(self):
super(dpi_Window, self).__init__()
self.setupUi(self)
if __name__ == '__main__':
app = QApplication(sys.argv)
mywin = Window()
dpi_window=dpi_Window()
mywin.show()
sys.exit(app.exec_())
优先采用这种方式:如禁用最大最小化采用第一种方式无效,这种方式把Form
看作主窗体可以执行除了菜单栏和状态栏的其他操作
这种方式下还可以在主窗口控制显示的其他窗口的控件
(只不过需要指明是哪个窗口而不是使用self关键字)
例:
add_window.add_size.clear()
add_window.add_kernel.clear()
add_window.close()