文章目录
前言
在编写pyqt 页面时有时候需要不同页面进行数据传输。本文讲解静态函数方法。直接看示例。
程序1:caogao1.py输入数据界面
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import os #自带
from PyQt5 import QtCore, QtWidgets
class Ui_Dialog11(object):
def stack11UI(self):
#第一部分 加载数据集
self.lb1 = QLabel("输入数据窗口")
self.lb1.setAlignment(Qt.AlignHCenter)
self.textEdit1 = QTextEdit("输入数据:")
layout1= QtWidgets.QHBoxLayout()
layout1.addWidget(self.lb1)
layout1.addWidget(self.textEdit1)
self.stack11.setLayout(layout1)
@staticmethod # 静态方法 ,其它窗口调用
def TransmitResults(self):
return str(self.textEdit1.toPlainText())
程序2:caogao2.py接收数据界面
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import os #自带
from PyQt5 import QtCore, QtWidgets
from caogao1 import Ui_Dialog11 #导入caogao1.py中的Ui_Dialog11
class Ui_Dialog12(object):
def stack12UI(self):
#第一部分 加载数据集
self.lb2 = QLabel("接收数据窗口")
self.lb2.setAlignment(Qt.AlignHCenter)
self.btn2 = QPushButton("点击接收数据")
self.btn2.clicked.connect(self.GetResults)
self.textEdit2 = QTextEdit("接收数据:")
layout2= QtWidgets.QVBoxLayout()
layout2.addWidget(self.lb2)
layout2.addWidget(self.btn2)
layout2.addWidget(self.textEdit2)
self.stack12.setLayout(layout2)
def GetResults(self):
try:
jieguo=Ui_Dialog11.TransmitResults(self) #调用Ui_Dialog11.TransmitResults 静态方法
self.textEdit2.setText(str(jieguo)) #写入
except Exception as e1:
self.textEdit2.setText(str(e1)) # 写入
程序3 :将输入数据界面和接收数据界面组合成一个总界面
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author: yudengwu(余登武)
# @Date : 2023/8/27
#@email:1344732766@qq.com
import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import os #自带
from PyQt5 import QtCore, QtWidgets, QtGui
from caogao1 import Ui_Dialog11 #导入
from caogao2 import Ui_Dialog12#导入
class StackedExample(QWidget,Ui_Dialog11,Ui_Dialog12):
def __init__(self):
super(StackedExample, self).__init__()
#设置窗口初始位置和大小
self.setGeometry(300,50,100,100)
screen = QDesktopWidget().screenGeometry() # 屏膜
self.setMinimumSize(screen.width() * 0.7, screen.height() * 0.7)
self.setMaximumSize(screen.width() * 0.9, screen.height() * 0.9)
MAIN_SIZE_MAX = QSize(16777215, 16777215);
self.setMaximumSize(MAIN_SIZE_MAX);
self.setWindowFlag(QtCore.Qt.WindowMaximizeButtonHint, True)
#self.setWindowFlags(QtCore.Qt.WindowMinMaxButtonsHint|QtCore.Qt.WindowCloseButtonHint)
self.setWindowTitle('总页面')
# 创建列表窗口,添加条目
self.leftlist = QListWidget()
self.leftlist.insertItem(0, '输入数据界面')
self.leftlist.insertItem(1, '接收数据页面')
# 创建二个小控件
self.stack11 = QWidget() #stack11 和Ui_Dialog11中保持一致
self.stack12 = QWidget()#stack12 和Ui_Dialog12中保持一致
self.stack11UI() #初始化
self.stack12UI()#初始化
# 在QStackedWidget对象中填充了二个子控件
self.stack = QStackedWidget(self)
self.stack.addWidget(self.stack11)
self.stack.addWidget(self.stack12)
# 水平布局,添加部件到布局中
HBox = QHBoxLayout()
HBox.addWidget(self.leftlist, 1)
HBox.addWidget(self.stack, 5)
self.setLayout(HBox)
self.leftlist.currentRowChanged.connect(self.display)
def display(self, i):
# 设置当前可见的选项卡的索引
self.stack.setCurrentIndex(i)
if __name__ == '__main__':
app=QApplication(sys.argv)
demo=StackedExample()
demo.show()
sys.exit(app.exec_())
讲解
输入数据界面
接收数据界面
在输入数据界面 输入值
在接收数据界面 点击接收,可以发现数据从一个界面传到另一个界面了。
总结
1、将函数变成静态函数方法@staticmethod
@staticmethod # 静态方法 ,其它窗口调用
def 函数名(self):
return 结果
2、其它窗口通过静态函数所在类名.静态函数(self)
得到传递值