Я пытаюсь разработать графический интерфейс, чтобы показать моего робота и препятствия вокруг него. Я создал графический интерфейс класса, и он имеет функцию-член showObstacle, чтобы показать препятствие. Поскольку я хочу сохранить все препятствия на месте, я создаю новый объект препятствий в векторе для хранения всех объектов.
Я вызвал эту функцию в init функции класса для проверки, и она прошла успешно.
Но когда я вызываю эту функцию в другом классе, она не показывает препятствий в окне GUI. В классе TCP_Connection (где я получаю информацию о роботе) я создал класс myGui и вызвал функцию showObstacle.
После отладки выясняется, что он создает объекты препятствий при каждом вызове, но не отображает их в окне
#this is file 1, GUI Class
import sys
from PyQt5 import QtWidgets, QtGui, QtCore
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget
from PyQt5.QtCore import Qt
from pynput import keyboard
class App(QWidget):
def __init__(self, OtherWindow):
super().__init__()
self.setGeometry(100,100,440,800)
self.setWindowTitle("New GUI Interface Window")
self.currentState = 0
self.obstCounter = 0
self.d = []
#testing showObstacle
self.showObstacle(205, 305) #this works
self.showObstacle(210,315) #this also works
self.show()
def showObstacle(self, Obs_x, Obs_y):
self.obstImage = QtGui.QImage('obsta_edited.png')
self.pixmap_obst = QtGui.QPixmap(self.obstImage)
self.d.append("O{0}".format(self.obstCounter))
self.d[self.obstCounter] = QtWidgets.QLabel(self)
self.d[self.obstCounter].setPixmap(self.pixmap_obst)
self.d[self.obstCounter].move(Obs_x, Obs_y)
self.d[self.obstCounter].adjustSize()
self.obstCounter += 1
print(self.d)
print("Obstacle Run")
это вызывающий класс
from myGUI import App
from PyQt5.QtWidgets import QWidget,QLabel,QLineEdit, QHBoxLayout,QVBoxLayout,QMainWindow,QPushButton, QFrame, QDesktopWidget, QApplication
from PyQt5.Qt import QStackedLayout
import sys, random
class TCP_Communication:
def __init__(self):
super().__init__()
self.openWindow()
def openWindow(self):
self.window = QMainWindow()
self.myGui = App(self.window)
self.myGui.showObstacle(215, 320)
self.stacked_layout = QStackedLayout()
self.stacked_layout.addWidget(self.myGui)
def tcp_showObstacle(self,x,y):
self.myGui.showObstacle(x,y)
if __name__ == '__main__':
app = QApplication([])
tcp_com = TCP_Communication()
sys.exit(app.exec_())
Отредактировано: приложен результат; Предположим, чтобы показать 4 препятствия, но показывает только 2
Отредактировано2: код теперь исполняемый