PyQt5 라이브러리를 사용하여 다중 창 응용 프로그램을 개발하려고했습니다. 별도의 기능 전용 두 번째 창을 갖고 싶었습니다. 메인 창에서 보조 창으로 문제없이 전환 할 수있었습니다. 그러나 다시 전환을 시도한 후 재귀 오류 예외가 발생했습니다. 다음은 관련 코드입니다.
import os
import sys
from functools import partial
from PyQt5.QtGui import QIcon, QPixmap
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QApplication, QFrame, QMessageBox, QMenu
class IpLogger(QMainWindow):
def __init__(self):
super(IpLogger, self).__init__()
self.setWindowTitle("Main window")
self.setFixedSize(648, 228)
self.setWindowIcon(QtGui.QIcon("data\\icon\\WiFicon.ico"))
self.loggerUI()
def loggerUI(self):
#Define font variable
font = QtGui.QFont()
#Button leading to second window
self.mediaBtn = QtWidgets.QPushButton(self)
self.mediaBtn.setGeometry(QtCore.QRect(10, 180, 181, 41))
font.setPointSize(10)
self.mediaBtn.setFont(font)
self.mediaBtn.setObjectName("mediaBtn")
self.mediaBtn.setText("Social Media")
self.mediaBtn.clicked.connect(partial(self.showWindow, Media()))
#Switching windows
def showWindow(self, window):
self.win = window
self.win.show()
self.close()
class Media(QMainWindow):
def __init__(self):
super(Media, self).__init__()
self.setWindowTitle("Second window")
self.setFixedSize(300, 180)
self.setWindowIcon(QtGui.QIcon("data\\icon\\WiFicon.ico"))
self.mediaUI()
def mediaUI(self):
#Variables
font = QtGui.QFont()
#Button leading back to the main menu
self.backBtn = QtWidgets.QPushButton(self)
self.backBtn.setGeometry(QtCore.QRect(130, 123, 40, 40))
font.setFamily("Segoe UI")
font.setPointSize(10)
self.backBtn.setFont(font)
self.backBtn.setObjectName("backBtn")
self.backBtn.setStyleSheet("background-color: rgb(69, 69, 69, 0)")
self.backBtn.setIcon(QtGui.QIcon("data\\icon\\back.png"))
self.backBtn.setIconSize(QtCore.QSize(40, 40))
self.backBtn.clicked.connect(partial(self.showWindow, IpLogger()))
#Switching windows
def showWindow(self, window):
self.win = window
self.win.show()
self.close()
def window():
app = QApplication(sys.argv)
win = IpLogger()
win.show()
sys.exit(app.exec_())
window()
코드에 따라 IpLogger 객체를 생성하면이 IpLogger 객체는 Media () 객체가 빌드 될 때 실행되는 loggerUI 메서드에서 생성하고, 새 객체는 mediaUI ()에서 동일한 작업을 수행합니다. 즉, 다른 IpLogger 객체를 생성합니다. 즉, 다음 작업을 수행합니다.
IpLogger->loggerUI->Media->mediaUI->IpLogger->loggerUI->Media->...
OP 게시물에 설명 된 내용에 따르면 단일 IpLogger 개체와 단일 Media 개체 만 원하므로 두 개체 모두 창 기능에서 생성하고 연결을 사용하여 하나 또는 다른 개체의 가시성을 교환 할 수 있습니다. 경우.
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class IpLogger(QtWidgets.QMainWindow):
def __init__(self):
super(IpLogger, self).__init__()
self.setWindowTitle("Main window")
self.setFixedSize(648, 228)
self.setWindowIcon(QtGui.QIcon("data\\icon\\WiFicon.ico"))
self.loggerUI()
def loggerUI(self):
# Define font variable
font = QtGui.QFont()
# Button leading to second window
self.mediaBtn = QtWidgets.QPushButton(self)
self.mediaBtn.setGeometry(QtCore.QRect(10, 180, 181, 41))
font.setPointSize(10)
self.mediaBtn.setFont(font)
self.mediaBtn.setObjectName("mediaBtn")
self.mediaBtn.setText("Social Media")
class Media(QtWidgets.QMainWindow):
def __init__(self):
super(Media, self).__init__()
self.setWindowTitle("Second window")
self.setFixedSize(300, 180)
self.setWindowIcon(QtGui.QIcon("data\\icon\\WiFicon.ico"))
self.mediaUI()
def mediaUI(self):
# Variables
font = QtGui.QFont()
# Button leading back to the main menu
self.backBtn = QtWidgets.QPushButton(self)
self.backBtn.setGeometry(QtCore.QRect(130, 123, 40, 40))
font.setFamily("Segoe UI")
font.setPointSize(10)
self.backBtn.setFont(font)
self.backBtn.setObjectName("backBtn")
self.backBtn.setStyleSheet("background-color: rgb(69, 69, 69, 0)")
self.backBtn.setIcon(QtGui.QIcon("data\\icon\\back.png"))
self.backBtn.setIconSize(QtCore.QSize(40, 40))
def window():
app = QtWidgets.QApplication(sys.argv)
win = IpLogger()
media = Media()
win.mediaBtn.clicked.connect(media.show)
win.mediaBtn.clicked.connect(win.close)
media.backBtn.clicked.connect(win.show)
media.backBtn.clicked.connect(media.close)
win.show()
sys.exit(app.exec_())
if __name__ == "__main__":
window()
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다