Python Pyqt5程序打开另一个窗口

Python Pyqt5程序打开另一个窗口,python,pyqt5,Python,Pyqt5,我正在尝试创建一个Pyqt5文件,通过单击“推送窗口”按钮打开另一个窗口,并在单击“处理”按钮时打开图像运行程序时,我将这些行视为错误 Traceback (most recent call last): File "untitled.py", line 52, in <module> w = MainWindow() File "untitled.py", line 27, in __init__ layout.add

我正在尝试创建一个Pyqt5文件,通过单击“推送窗口”按钮打开另一个窗口,并在单击“处理”按钮时打开图像
运行程序时,我将这些行视为错误

Traceback (most recent call last):
  File "untitled.py", line 52, in <module>
    w = MainWindow()
  File "untitled.py", line 27, in __init__
    layout.addWidget(self.button)
NameError: name 'layout' is not defined

您有以下错误:

  • 使用“全局X”不会创建全局变量,它只表示变量X已经是一个全局变量,并且希望重用。一般来说,这是一种不好的做法,在您的情况下,它不会提供任何好处,相反会导致混乱

  • 在主窗口构造函数中,您没有创建“layout”对象,因此会出现该错误

考虑到上述情况,解决方案是:

class另一个窗口(QWidget):
定义初始化(自):
super()。\uuuu init\uuuuu()
布局=QVBoxLayout(自身)
self.label=QLabel(“另一个窗口”)
layout.addWidget(self.label)
类主窗口(QMainWindow):
定义初始化(自):
super()。\uuuu init\uuuuu()
central_widget=QWidget()
self.setCentralWidget(中心窗口小部件)
布局=QVBoxLayout(中心_小部件)
self.button=QPushButton(“按下窗口”)
self.button.clicked.connect(self.show\u new\u窗口)
layout.addWidget(self.button)
self.btn1=QPushButton(“过程”)
self.btn1.clicked.connect(self.show\u new\u窗口)
layout.addWidget(self.btn1)
def getImage(自我):
fname=QFileDialog.getOpenFileName(
self,“打开文件”、“/home/ucal/Desktop/”、“图像文件(*.jpg)”
)
imagePath=fname[0]
pixmap=QPixmap(imagePath)
打印(图像路径)
self.label.setPixmap(QPixmap(pixmap))
self.resize(pixmap.width(),pixmap.height())
def显示新窗口(自选,已选中):
self.w=另一个窗口()
self.w.show()

非常感谢您的支持,先生。意义重大。
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel, QVBoxLayout, QWidget

import sys


class AnotherWindow(QWidget):

    def __init__(self):
        super().__init__()
        global layout
        layout = QVBoxLayout()
        self.label = QLabel("Another Window")
        layout.addWidget(self.label)
        self.setLayout(layout)



class MainWindow(QMainWindow):

    def __init__(self):
        super().__init__()
        self.button = QPushButton("Push for Window")
        self.button.clicked.connect(self.show_new_window)
        layout.addWidget(self.button)
        self.btn1 = QPushButton("Process")
        self.btn1.clicked.connect(self.show_new_window)
        layout.addWidget(self.btn1)



    def getImage(self):
        fname = QFileDialog.getOpenFileName(self, 'Open file','/home/ucal/Desktop/', "Image files (*.jpg )")
        global imagePath
        imagePath = fname[0]
        global pixmap
        pixmap = QPixmap(imagePath)
        print(imagePath)
        self.label.setPixmap(QPixmap(pixmap))
        self.resize(pixmap.width(), pixmap.height())



    def show_new_window(self, checked):
        self.w = AnotherWindow()
        self.w.show()


app = QApplication(sys.argv)
w = MainWindow()
w.show()
app.exec_()