Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在PyQt5中从主窗口打开文件到新窗口(在不同的文件中)_Python_Pyqt_Pyqt5 - Fatal编程技术网

Python 在PyQt5中从主窗口打开文件到新窗口(在不同的文件中)

Python 在PyQt5中从主窗口打开文件到新窗口(在不同的文件中),python,pyqt,pyqt5,Python,Pyqt,Pyqt5,我有两个文件,一个用于我的主窗口,其中有一个图像和一个按钮,另一个用于新窗口。我想让它做的是,当我从主窗口按下按钮时,它允许我加载一个文件,并在新窗口的TextEdit小部件中显示它 这里有我正在使用的文件: main window.py import sys import os from PyQt5 import QtWidgets, QtGui from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtWidgets imp

我有两个文件,一个用于我的主窗口,其中有一个图像和一个按钮,另一个用于新窗口。我想让它做的是,当我从主窗口按下按钮时,它允许我加载一个文件,并在新窗口的
TextEdit
小部件中显示它

这里有我正在使用的文件:

main window.py

import sys
import os
from PyQt5 import QtWidgets, QtGui
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtWidgets import QPushButton, QVBoxLayout, QTextEdit, QHBoxLayout, QLabel, QMainWindow, QAction, QFileDialog

class Window(QWidget):

    def __init__(self, parent=None):
        super(Window, self).__init__(parent)

        self.img = QLabel()
        self.relleno=QLabel()
        self.btn_load = QPushButton('Load')
        self.width = 400
        self.height = 150


        self.init_ui()

    def init_ui(self):
        self.img.setPixmap(QtGui.QPixmap("someimage.png"))


        h_layout = QHBoxLayout()
        v_layout = QVBoxLayout()
        h_final = QHBoxLayout()

        h_layout.addWidget(self.img)

        v_layout.addWidget(self.btn_load)

        h_final.addLayout(h_layout)
        h_final.addLayout(v_layout)

        self.btn_load.clicked.connect(self.loadafile)

        self.setLayout(h_final)
        self.setWindowTitle('This is main window')
        self.setGeometry(600,150,self.width,self.height)

        self.show()

    def loadafile(self):
        filename = QFileDialog.getOpenFileName(self, 'Open File', os.getenv('HOME'))
        with open(filename[0], 'r') as f:
            file_text = f.read()
            return file_text

def main():
    app = QApplication(sys.argv)
    main = Window()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
import os
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QTextEdit, QVBoxLayout
from MainWindow import loadafile

info=loadafile()

class SecondWindow(QWidget):
    def __init__(self):
        super(SecondWindow, self).__init__()
        self.text = QTextEdit(self)

        self.init_ui()

    def init_ui(self):
        v_layout = QVBoxLayout()

        v_layout.addWidget(self.text)

        self.setLayout(v_layout)
        self.setText(info)
        self.setWindowTitle('Opened Text')

        self.show()

app = QApplication(sys.argv)
shower = SecondWindow()
sys.exit(app.exec_())
from PyQt5 import QtWidgets

class SecondWindow(QtWidgets.QWidget):
    def __init__(self):
        super(SecondWindow, self).__init__()
        self.text = QtWidgets.QTextEdit(self)
        self.init_ui()

    def init_ui(self):
        v_layout = QtWidgets.QVBoxLayout(self)
        v_layout.addWidget(self.text)
        self.setWindowTitle('Opened Text')
        self.show()

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    shower = SecondWindow()
    sys.exit(app.exec_())
import os
import sys
from PyQt5 import QtCore, QtGui, QtWidgets

from NewWindow import SecondWindow

class Window(QtWidgets.QWidget):
    textChanged = QtCore.pyqtSignal(str)

    def __init__(self, parent=None):
        super(Window, self).__init__(parent)

        self.img =QtWidgets.QLabel()
        self.relleno=QtWidgets.QLabel()
        self.btn_load = QtWidgets.QPushButton('Load')
        self.width = 400
        self.height = 150


        self.init_ui()

    def init_ui(self):
        self.img.setPixmap(QtGui.QPixmap("someimage.png"))

        h_final = QtWidgets.QHBoxLayout(self)
        h_final.addWidget(self.img)
        h_final.addWidget(self.btn_load)

        self.btn_load.clicked.connect(self.loadafile)
        self.setWindowTitle('This is main window')
        self.setGeometry(600,150,self.width,self.height)

        self.show()

    @QtCore.pyqtSlot()
    def loadafile(self):
        filename, _  = QtWidgets.QFileDialog.getOpenFileName(self, 'Open File', os.getenv('HOME'))
        with open(filename, 'r') as f:
            file_text = f.read()
            self.textChanged.emit(file_text)

def main():
    app = QtWidgets.QApplication(sys.argv)
    main = Window()
    s = SecondWindow()
    main.textChanged.connect(s.text.append)
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
NewWindow.py

import sys
import os
from PyQt5 import QtWidgets, QtGui
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtWidgets import QPushButton, QVBoxLayout, QTextEdit, QHBoxLayout, QLabel, QMainWindow, QAction, QFileDialog

class Window(QWidget):

    def __init__(self, parent=None):
        super(Window, self).__init__(parent)

        self.img = QLabel()
        self.relleno=QLabel()
        self.btn_load = QPushButton('Load')
        self.width = 400
        self.height = 150


        self.init_ui()

    def init_ui(self):
        self.img.setPixmap(QtGui.QPixmap("someimage.png"))


        h_layout = QHBoxLayout()
        v_layout = QVBoxLayout()
        h_final = QHBoxLayout()

        h_layout.addWidget(self.img)

        v_layout.addWidget(self.btn_load)

        h_final.addLayout(h_layout)
        h_final.addLayout(v_layout)

        self.btn_load.clicked.connect(self.loadafile)

        self.setLayout(h_final)
        self.setWindowTitle('This is main window')
        self.setGeometry(600,150,self.width,self.height)

        self.show()

    def loadafile(self):
        filename = QFileDialog.getOpenFileName(self, 'Open File', os.getenv('HOME'))
        with open(filename[0], 'r') as f:
            file_text = f.read()
            return file_text

def main():
    app = QApplication(sys.argv)
    main = Window()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
import os
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QTextEdit, QVBoxLayout
from MainWindow import loadafile

info=loadafile()

class SecondWindow(QWidget):
    def __init__(self):
        super(SecondWindow, self).__init__()
        self.text = QTextEdit(self)

        self.init_ui()

    def init_ui(self):
        v_layout = QVBoxLayout()

        v_layout.addWidget(self.text)

        self.setLayout(v_layout)
        self.setText(info)
        self.setWindowTitle('Opened Text')

        self.show()

app = QApplication(sys.argv)
shower = SecondWindow()
sys.exit(app.exec_())
from PyQt5 import QtWidgets

class SecondWindow(QtWidgets.QWidget):
    def __init__(self):
        super(SecondWindow, self).__init__()
        self.text = QtWidgets.QTextEdit(self)
        self.init_ui()

    def init_ui(self):
        v_layout = QtWidgets.QVBoxLayout(self)
        v_layout.addWidget(self.text)
        self.setWindowTitle('Opened Text')
        self.show()

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    shower = SecondWindow()
    sys.exit(app.exec_())
import os
import sys
from PyQt5 import QtCore, QtGui, QtWidgets

from NewWindow import SecondWindow

class Window(QtWidgets.QWidget):
    textChanged = QtCore.pyqtSignal(str)

    def __init__(self, parent=None):
        super(Window, self).__init__(parent)

        self.img =QtWidgets.QLabel()
        self.relleno=QtWidgets.QLabel()
        self.btn_load = QtWidgets.QPushButton('Load')
        self.width = 400
        self.height = 150


        self.init_ui()

    def init_ui(self):
        self.img.setPixmap(QtGui.QPixmap("someimage.png"))

        h_final = QtWidgets.QHBoxLayout(self)
        h_final.addWidget(self.img)
        h_final.addWidget(self.btn_load)

        self.btn_load.clicked.connect(self.loadafile)
        self.setWindowTitle('This is main window')
        self.setGeometry(600,150,self.width,self.height)

        self.show()

    @QtCore.pyqtSlot()
    def loadafile(self):
        filename, _  = QtWidgets.QFileDialog.getOpenFileName(self, 'Open File', os.getenv('HOME'))
        with open(filename, 'r') as f:
            file_text = f.read()
            self.textChanged.emit(file_text)

def main():
    app = QtWidgets.QApplication(sys.argv)
    main = Window()
    s = SecondWindow()
    main.textChanged.connect(s.text.append)
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

我认为
loadafile
确实返回了我的
file\u text
变量,但我不知道如何从那里打开新窗口。我想我需要在主窗口中使用析构函数,然后显示新窗口,但我不知道该怎么做(这是我第一次尝试OOP)

程序不是一组文件,尤其是在OOP中,程序是对象之间的交互。如果对象具有相同的作用域,则它们会进行交互,因此必须在一个位置创建两个窗口,以便将信息从一个窗口传递到另一个窗口

另一方面,在Qt中有一个基本概念,即信号,此功能允许通知另一个对象的状态更改,而无需太多依赖项,因此在本例中,我将创建一个信号,将文本传输到另一个对象

NewWindow.py

import sys
import os
from PyQt5 import QtWidgets, QtGui
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtWidgets import QPushButton, QVBoxLayout, QTextEdit, QHBoxLayout, QLabel, QMainWindow, QAction, QFileDialog

class Window(QWidget):

    def __init__(self, parent=None):
        super(Window, self).__init__(parent)

        self.img = QLabel()
        self.relleno=QLabel()
        self.btn_load = QPushButton('Load')
        self.width = 400
        self.height = 150


        self.init_ui()

    def init_ui(self):
        self.img.setPixmap(QtGui.QPixmap("someimage.png"))


        h_layout = QHBoxLayout()
        v_layout = QVBoxLayout()
        h_final = QHBoxLayout()

        h_layout.addWidget(self.img)

        v_layout.addWidget(self.btn_load)

        h_final.addLayout(h_layout)
        h_final.addLayout(v_layout)

        self.btn_load.clicked.connect(self.loadafile)

        self.setLayout(h_final)
        self.setWindowTitle('This is main window')
        self.setGeometry(600,150,self.width,self.height)

        self.show()

    def loadafile(self):
        filename = QFileDialog.getOpenFileName(self, 'Open File', os.getenv('HOME'))
        with open(filename[0], 'r') as f:
            file_text = f.read()
            return file_text

def main():
    app = QApplication(sys.argv)
    main = Window()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
import os
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QTextEdit, QVBoxLayout
from MainWindow import loadafile

info=loadafile()

class SecondWindow(QWidget):
    def __init__(self):
        super(SecondWindow, self).__init__()
        self.text = QTextEdit(self)

        self.init_ui()

    def init_ui(self):
        v_layout = QVBoxLayout()

        v_layout.addWidget(self.text)

        self.setLayout(v_layout)
        self.setText(info)
        self.setWindowTitle('Opened Text')

        self.show()

app = QApplication(sys.argv)
shower = SecondWindow()
sys.exit(app.exec_())
from PyQt5 import QtWidgets

class SecondWindow(QtWidgets.QWidget):
    def __init__(self):
        super(SecondWindow, self).__init__()
        self.text = QtWidgets.QTextEdit(self)
        self.init_ui()

    def init_ui(self):
        v_layout = QtWidgets.QVBoxLayout(self)
        v_layout.addWidget(self.text)
        self.setWindowTitle('Opened Text')
        self.show()

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    shower = SecondWindow()
    sys.exit(app.exec_())
import os
import sys
from PyQt5 import QtCore, QtGui, QtWidgets

from NewWindow import SecondWindow

class Window(QtWidgets.QWidget):
    textChanged = QtCore.pyqtSignal(str)

    def __init__(self, parent=None):
        super(Window, self).__init__(parent)

        self.img =QtWidgets.QLabel()
        self.relleno=QtWidgets.QLabel()
        self.btn_load = QtWidgets.QPushButton('Load')
        self.width = 400
        self.height = 150


        self.init_ui()

    def init_ui(self):
        self.img.setPixmap(QtGui.QPixmap("someimage.png"))

        h_final = QtWidgets.QHBoxLayout(self)
        h_final.addWidget(self.img)
        h_final.addWidget(self.btn_load)

        self.btn_load.clicked.connect(self.loadafile)
        self.setWindowTitle('This is main window')
        self.setGeometry(600,150,self.width,self.height)

        self.show()

    @QtCore.pyqtSlot()
    def loadafile(self):
        filename, _  = QtWidgets.QFileDialog.getOpenFileName(self, 'Open File', os.getenv('HOME'))
        with open(filename, 'r') as f:
            file_text = f.read()
            self.textChanged.emit(file_text)

def main():
    app = QtWidgets.QApplication(sys.argv)
    main = Window()
    s = SecondWindow()
    main.textChanged.connect(s.text.append)
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
main window.py

import sys
import os
from PyQt5 import QtWidgets, QtGui
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtWidgets import QPushButton, QVBoxLayout, QTextEdit, QHBoxLayout, QLabel, QMainWindow, QAction, QFileDialog

class Window(QWidget):

    def __init__(self, parent=None):
        super(Window, self).__init__(parent)

        self.img = QLabel()
        self.relleno=QLabel()
        self.btn_load = QPushButton('Load')
        self.width = 400
        self.height = 150


        self.init_ui()

    def init_ui(self):
        self.img.setPixmap(QtGui.QPixmap("someimage.png"))


        h_layout = QHBoxLayout()
        v_layout = QVBoxLayout()
        h_final = QHBoxLayout()

        h_layout.addWidget(self.img)

        v_layout.addWidget(self.btn_load)

        h_final.addLayout(h_layout)
        h_final.addLayout(v_layout)

        self.btn_load.clicked.connect(self.loadafile)

        self.setLayout(h_final)
        self.setWindowTitle('This is main window')
        self.setGeometry(600,150,self.width,self.height)

        self.show()

    def loadafile(self):
        filename = QFileDialog.getOpenFileName(self, 'Open File', os.getenv('HOME'))
        with open(filename[0], 'r') as f:
            file_text = f.read()
            return file_text

def main():
    app = QApplication(sys.argv)
    main = Window()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
import os
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QTextEdit, QVBoxLayout
from MainWindow import loadafile

info=loadafile()

class SecondWindow(QWidget):
    def __init__(self):
        super(SecondWindow, self).__init__()
        self.text = QTextEdit(self)

        self.init_ui()

    def init_ui(self):
        v_layout = QVBoxLayout()

        v_layout.addWidget(self.text)

        self.setLayout(v_layout)
        self.setText(info)
        self.setWindowTitle('Opened Text')

        self.show()

app = QApplication(sys.argv)
shower = SecondWindow()
sys.exit(app.exec_())
from PyQt5 import QtWidgets

class SecondWindow(QtWidgets.QWidget):
    def __init__(self):
        super(SecondWindow, self).__init__()
        self.text = QtWidgets.QTextEdit(self)
        self.init_ui()

    def init_ui(self):
        v_layout = QtWidgets.QVBoxLayout(self)
        v_layout.addWidget(self.text)
        self.setWindowTitle('Opened Text')
        self.show()

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    shower = SecondWindow()
    sys.exit(app.exec_())
import os
import sys
from PyQt5 import QtCore, QtGui, QtWidgets

from NewWindow import SecondWindow

class Window(QtWidgets.QWidget):
    textChanged = QtCore.pyqtSignal(str)

    def __init__(self, parent=None):
        super(Window, self).__init__(parent)

        self.img =QtWidgets.QLabel()
        self.relleno=QtWidgets.QLabel()
        self.btn_load = QtWidgets.QPushButton('Load')
        self.width = 400
        self.height = 150


        self.init_ui()

    def init_ui(self):
        self.img.setPixmap(QtGui.QPixmap("someimage.png"))

        h_final = QtWidgets.QHBoxLayout(self)
        h_final.addWidget(self.img)
        h_final.addWidget(self.btn_load)

        self.btn_load.clicked.connect(self.loadafile)
        self.setWindowTitle('This is main window')
        self.setGeometry(600,150,self.width,self.height)

        self.show()

    @QtCore.pyqtSlot()
    def loadafile(self):
        filename, _  = QtWidgets.QFileDialog.getOpenFileName(self, 'Open File', os.getenv('HOME'))
        with open(filename, 'r') as f:
            file_text = f.read()
            self.textChanged.emit(file_text)

def main():
    app = QtWidgets.QApplication(sys.argv)
    main = Window()
    s = SecondWindow()
    main.textChanged.connect(s.text.append)
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

我可以为一个对象提供多个信号吗?@lissethamc您可以获得所需的信号,我建议您在询问之前尝试:-)