在Pyqt5中打开具有网格布局的新窗口

2024-09-30 12:27:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道这个问题被问了很多次,但每次我看到不同的情况。在

第一个问题:

我无法打开具有网格布局的新窗口(Window2)。在

我试图在pyqt中打开一个新窗口(Window2),这个窗口(Window2)有网格布局。在

为了使网格布局工作,Window2有父级(QWidget)

为了使它打开,2有另一个父窗口(QMainWindow)

但这两个父母的冲突意味着:

如果只有QWidget作为父级,Window2根本就不会打开

只有QMainWindow作为父级时,Window2将打开,但没有网格布局

当两者都作为父级时,Window2将打开,但没有网格布局

我不知道如何在保持网格布局的同时正确打开窗口

编辑:我发现了关于多重继承的问题,但我不明白它是如何工作的Multiple inheritance

第二个问题:

我有一个全局变量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()

Tags: fromimportself网格maindef布局window
1条回答
网友
1楼 · 发布于 2024-09-30 12:27:26

试试看:

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 1")
        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.hide()                                             #  - close()
        self.window2 = Window2(memorysize, numberofholes)       #  - self
        self.window2.show()


#     second window for holes input    
class Window2(QWidget):                                         #  - QMainWindow,
    def __init__(self, memorysize, numberofholes, parent=None):
        super().__init__(parent)

        self.memorysize, self.numberofholes = memorysize, numberofholes
        print("memorysize=`{}`,\nnumberofholes=`{}`".format(self.memorysize, self.numberofholes))

        self.setWindowTitle("Memory 2")
        self.setGeometry(50,50,500,300)
        self.home()
        self.show()

    def home(self):
        self.grid = QGridLayout()
        self.setLayout(self.grid)
        print(self.numberofholes)

        for n in range (2):
            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)

if __name__ == '__main__':
     app = QApplication(sys.argv)
     main = Window()
     main.show()
     sys.exit(app.exec_())

enter image description here

相关问题 更多 >

    热门问题