gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:13:34 25 4
gpt4 key购买 nike

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

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

MainWindow.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()

NewWindow.py

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_())

我认为 loadafile 确实返回了我的 file_text 变量,但我不知道如何从那里打开新窗口。我想我需要对主窗口使用析构函数,然后显示新窗口,但我不确定如何执行此操作(这是我第一次尝试 OOP)

最佳答案

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

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

NewWindow.py

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_())

MainWindow.py

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()

关于python - 在 PyQt5 中从主窗口打开文件到新窗口(在不同的文件中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55085868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com