Я знаю, что этот вопрос задавался много раз, но каждый раз, когда я вижу другой случай.
1-я проблема:
Я не могу открыть новое окно (Window2) с разметкой сетки.
Я пытаюсь открыть новое окно (Window2) в pyqt, это окно (Window2) имеет разметку сетки.
Чтобы сделать разметку сетки, Window2 имеет родителя (QWidget)
и чтобы открыть его, в Window2 есть другой родитель (QMainWindow)
, но эти два родителя конфликтуют друг с другом, значит:
при наличии QWidget только в качестве родителя, Window2не открывается вообще
при наличии QMainWindow только в качестве родителя, Window2 открывается, но без разметки сетки
при наличии обоих в качестве родителей, Window2 открывается, но без разметки сетки
и я не знаю, как правильно открыть окно, сохраняя макет сетки
Редактировать: я нашел вопрос о множественном наследовании, но я не мог понять, как оно работает Многократное наследование
2ая проблема:
у меня глобальная переменная numberofholes, значение которой изменяется в классе "Window" и затем используется в классе "Window2"
, поэтому эта переменная изменяетсяв классе "Window" правильно, но либо не определено, либо его значение не изменено в классе "Window2", так как глобальное значение не определено в классе "Window2"
ЧастьКод:
import sys
from PyQt5 import QtWidgets, QtGui, QtCore
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
#######global variables#####################################
global memorysize
global numberofholes
####################################################################
class Window(QWidget):
def __init__(self,parent=None):
super(Window,self).__init__(parent)
self.setWindowTitle("Memory")
self.setGeometry(50,50,500,300)
self.home()
def home(self):
self.grid=QGridLayout()
self.setLayout(self.grid)
self.memory=QLabel(self)
self.memory.setText("Total Memory size")
self.grid.addWidget(self.memory,0,0)
self.memoryinput=QLineEdit(self)
self.grid.addWidget(self.memoryinput,0,20)
self.holes=QLabel(self)
self.holes.setText("Number of holes")
self.grid.addWidget(self.holes,5,0)
self.inputholes=QLineEdit(self)
self.grid.addWidget(self.inputholes,5,20)
self.submit=QPushButton("OK",self)
self.grid.addWidget(self.submit,10,0)
#################Action on clicking submit###########################
self.submit.clicked.connect(self.getholes)
def getholes(self):
memorysize=float(self.memoryinput.text())
numberofholes=int(self.inputholes.text())
self.close()
self.window2=Window2(self)
##############second window for holes input##########################
class Window2(QMainWindow,QWidget):
def __init__(self,parent=None):
super().__init__(parent)
self.setWindowTitle("Memory")
self.setGeometry(50,50,500,300)
self.home()
self.show()
def home(self):
self.grid=QGridLayout()
self.setLayout(self.grid)
#print(numberofholes)
for n in range (numberofholes):
self.start_add=QLabel(self)
self.start_add.setText("Starting Address")
self.inputstart=QLineEdit(self)
self.size=QLabel(self)
self.size.setText("Size")
self.inputsize=QLineEdit(self)
self.grid.addWidget(self.start_add,2*n+1,0)
self.grid.addWidget(self.inputstart,2*n+1,1)
self.grid.addWidget(self.size,2*n+1,2)
self.grid.addWidget(self.inputsize,2*n+1,3)
def main():
app = QApplication(sys.argv)
main = Window()
main.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()