python - 将 PyQt5 GUI 与其他 python 程序集成
问题描述
我已经用 PyQt5 构建了一个 GUI,现在我想将它与另一个 python 程序集成。我以前通过将 TKinter 编写的 GUI 代码放在一个单独的线程中来做到这一点。我想知道如何以最佳方式将此 PyQt GUI 集成到我的其他代码中。
我的另一个程序有 2 个线程监控旋转编码器,主线程在 RFID 阅读器 + 一些数据库通信上工作。
PyQt GUI 必须是程序的主线程吗?
这是 PyQt 图形用户界面:
from PyQt5 import QtGui
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QTableWidget, QTableWidgetItem, QVBoxLayout, QLabel
from PyQt5.QtGui import QPixmap
import sys
class Reminder():
def __init__(self):
self.activity = 'activity' # instance variable unique to each instance
self.time = 0000
self.day = 'day'
self.multiple_days = False
class Window(QWidget):
def __init__(self):
super().__init__()
self.titel = "GUI for Andreas"
self.top = 150
self.left = 150
self.width = 500
self.height = 500
self.setWindowIcon(QtGui.QIcon("calender.png"))
self.InitWindow()
def InitWindow(self):
self.setWindowTitle(self.titel)
self.setGeometry(self.top,self.left,self.width,self.height)
self.creatingTables(test_list)
self.vBoxLayout = QVBoxLayout()
self.vBoxLayout.addWidget(self.tableWidget)
self.setLayout(self.vBoxLayout)
self.textWidgets()
self.vBoxLayout.addWidget(self.timelabel)
self.vBoxLayout.addWidget(self.daylabel)
self.show()
def creatingTables(self, planned_activities):
self.tableWidget = QTableWidget()
self.tableWidget.setRowCount(len(planned_activities))
self.tableWidget.setColumnCount(4)
count = 0
for i in planned_activities:
index = 0 + count
self.label = QLabel(self)
self.label.setPixmap(QPixmap('%s.png' %i.activity))
self.tableWidget.setCellWidget(index,0, self.label)
self.tableWidget.setItem(index,1, QTableWidgetItem(i.activity))
self.tableWidget.setItem(index,2, QTableWidgetItem(i.day))
self.tableWidget.setItem(index,3, QTableWidgetItem(str(i.time)))
count +=1
def textWidgets(self):
self.timelabel = QLabel(self)
self.daylabel = QLabel(self)
self.timelabel.setText("Time:%s" %glo_dict['Time'])
self.daylabel.setText("Day:%s" %glo_dict['Day'])
glo_dict = {'Time': 0000, 'Day': 'None'} #This dict will be updated by other threads in main code
#Simple test object, these objects will be made by the main thread in the other program.
test_list=[]
a = Reminder()
a.time = 1123
a.day = 'Monday'
a.activity = 'rolling'
test_list.append(a)
App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec())
解决方案
推荐阅读
- php - 在 Laravel 中将托管数据库复制到本地数据库
- sql - 如何组合具有不同列数的两个表SQL
- android - 表情符号未在 Flutter 应用程序中显示
- python - 每个单元格中索引值和列名之间具有日期差异的数据框
- swift - AVCaptureVideoPreviewLayer 不检测屏幕两个范围内的对象
- google-sheets - 在Google表格中将具有相同值的多个单元格与一个单元格合并以求平均值
- asp.net-mvc - 从 JsonApiDotNetCore 到 .NET Core 3.0 的迁移路径是什么?
- node.js - Docker / Kubernetes:试图擦除所有内容,但我仍然有一个在 localhost 上运行的容器,我无法使用 docker ps
- xcode - 如何在 Xcode 中开发多个 Swift Package Manager 包?
- node.js - 如何在猫鼬中一次将多个文档插入子文档