import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QVBoxLayout class MainWindow(QWidget): def init(self, data): super().init() # 创建界面元素 self.label1 = QLabel("坐标") self.label4 = QLabel("类别") self.button1 = QPushButton("1 ") self.button2 = QPushButton("2 ") self.button3 = QPushButton("3 ") self.button4 = QPushButton("4 ") self.button = QPushButton("确定") self.exit_button = QPushButton("退出") # 创建布局管理器 layout = QVBoxLayout() layout.addWidget(self.label1) layout.addWidget(self.label4) layout.addWidget(self.button1) layout.addWidget(self.button2) layout.addWidget(self.button3) layout.addWidget(self.button4) layout.addWidget(self.button) layout.addWidget(self.exit_button) # 退出 # 设置界面布局 self.setLayout(layout) # 为按钮添加点击事件 self.button1.clicked.connect(lambda: self.show_info(data[0])) self.button2.clicked.connect(lambda: self.show_info(data[1])) self.button3.clicked.connect(lambda: self.show_info(data[2])) self.button4.clicked.connect(lambda: self.show_info(data[3])) self.button.clicked.connect(lambda: self.show_upper_info())#确定 self.exit_button.clicked.connect(lambda: self.close()) # 为退出按钮添加点击事件 self.setFixedSize(500, 300) def show_info(self, info): # 显示信息 self.label1.setText("坐标:" + str(info[0])+","+str(info[1])+","+str(info[2])+","+str(info[3])) self.label4.setText("类别:" + str(info[4])) def show_upper_info(self): # 获取当前显示的信息 upper_info = self.label1.text() + "\n" + self.label4.text() # 在控制台输出上位机信息 print("\n" + upper_info) if name == 'main': # 假设这是程序输出的信息 data = [ [123, 456,"宽","高", "类别"], [234, 567,"宽", "高", "类别"], [345, 678, "宽", "高", "类别"], [456, 789, "宽", "高", "类别"], ] # 创建应用程序和窗口 app = QApplication(sys.argv) window = MainWindow(data) window.show() # 运行应用程序 sys.exit(app.exec_())将这个程序中data的输入改为另一个程序的print输出
时间: 2023-06-16 14:03:13 浏览: 112
如果你想将这个程序中的data输入改为另一个程序的print输出,你可以使用Python的subprocess模块来实现。具体来说,你可以使用subprocess.Popen()函数来运行第二个程序,并通过管道来获取它的输出。然后,你可以将这个输出解析为一个数据列表,并将其传递给MainWindow类的构造函数。下面是一个示例代码:
```
import sys
import subprocess
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QVBoxLayout
class MainWindow(QWidget):
def __init__(self, data):
super().__init__()
# 创建界面元素
self.label1 = QLabel("坐标")
self.label4 = QLabel("类别")
self.button1 = QPushButton("1 ")
self.button2 = QPushButton("2 ")
self.button3 = QPushButton("3 ")
self.button4 = QPushButton("4 ")
self.button = QPushButton("确定")
self.exit_button = QPushButton("退出")
# 创建布局管理器
layout = QVBoxLayout()
layout.addWidget(self.label1)
layout.addWidget(self.label4)
layout.addWidget(self.button1)
layout.addWidget(self.button2)
layout.addWidget(self.button3)
layout.addWidget(self.button4)
layout.addWidget(self.button)
layout.addWidget(self.exit_button)
# 退出
# 设置界面布局
self.setLayout(layout)
# 为按钮添加点击事件
self.button1.clicked.connect(lambda: self.show_info(data[0]))
self.button2.clicked.connect(lambda: self.show_info(data[1]))
self.button3.clicked.connect(lambda: self.show_info(data[2]))
self.button4.clicked.connect(lambda: self.show_info(data[3]))
self.button.clicked.connect(lambda: self.show_upper_info())#确定
self.exit_button.clicked.connect(lambda: self.close()) # 为退出按钮添加点击事件
self.setFixedSize(500, 300)
def show_info(self, info):
# 显示信息
self.label1.setText("坐标:" + str(info[0])+","+str(info[1])+","+str(info[2])+","+str(info[3]))
self.label4.setText("类别:" + str(info[4]))
def show_upper_info(self):
# 获取当前显示的信息
upper_info = self.label1.text() + "\n" + self.label4.text()
# 在控制台输出上位机信息
print("\n" + upper_info)
if __name__ == '__main__':
# 假设这是第二个程序的输出
output = "123,456,宽,高,类别\n234,567,宽,高,类别\n345,678,宽,高,类别\n456,789,宽,高,类别\n"
# 运行第二个程序并获取输出
proc = subprocess.Popen(["python", "second_program.py"], stdout=subprocess.PIPE)
output, error = proc.communicate()
# 将输出解析为数据列表
data = [line.strip().split(",") for line in output.decode().split("\n") if line.strip()]
# 创建应用程序和窗口
app = QApplication(sys.argv)
window = MainWindow(data)
window.show()
# 运行应用程序
sys.exit(app.exec_())
```
在这个示例代码中,我们假设第二个程序的输出是一个逗号分隔的文本字符串,每一行表示一个数据项。我们使用subprocess.Popen()函数来运行第二个程序,并将其输出通过管道传递给我们的程序。然后,我们使用output.decode()将输出的字节字符串解码为一个普通字符串,并将其按行分隔。我们使用strip()方法来删除每行开头和结尾的空格和换行符,并使用split(",")方法将每行分隔为一个数据列表。最后,我们将这些数据列表组成的列表传递给MainWindow类的构造函数。
阅读全文