如何将数据从一个窗口发送到另一个窗口

时间:2019-02-02 07:58:52

标签: pyqt5

我认为我的问题是有答案的,但它是针对pyqt4的,我无法弄清楚出什么问题了。

我在qt desiger上制作了2个窗口。它们都是Ui类型文件。 “ nadrzedny”是主窗口,“ dodaj”是第二窗口。 “ nadrzedny”具有QlistWidget,该QlistWidget应该列出由“ dodaj”窗口QLineEdit添加的项目。 1.如何使数据从“ dodaj”窗口发送到“ nadrzedny”窗口。 2.是否可以一键单击QpushButton-分配功能    例如,将数据传递到“ nadrzedny”窗口并将日期保存在文件中    同时。

在PY文件类型的 “nadrzedny”

'''

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file '/home/konrad   /Przyklad/nadrzedny.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.listWidget = QtWidgets.QListWidget(self.centralwidget)
        self.listWidget.setGeometry(QtCore.QRect(70, 110, 301, 331))
        self.listWidget.setObjectName("listWidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(110, 30, 291, 17))
        self.label.setObjectName("label")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(70, 470, 301, 27))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "Lista nieruchomości"))
        self.pushButton.setText(_translate("MainWindow", "Dodaj"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

'''

在Python类型的 “dodaj” 文件:

'''     #--编码:utf-8--

# Form implementation generated from reading ui file '/home/konrad/Przyklad/dodaj.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(400, 300)
        self.label = QtWidgets.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(30, 40, 131, 17))
        self.label.setObjectName("label")
        self.wpr_dane = QtWidgets.QLineEdit(Dialog)
        self.wpr_dane.setGeometry(QtCore.QRect(160, 30, 211, 27))
        self.wpr_dane.setObjectName("wpr_dane")
        self.zatwierdz2 = QtWidgets.QPushButton(Dialog)
        self.zatwierdz2.setGeometry(QtCore.QRect(60, 240, 171, 27))
        self.zatwierdz2.setObjectName("zatwierdz2")

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.label.setText(_translate("Dialog", "adres nieruchomości"))
        self.zatwierdz2.setText(_translate("Dialog", "Zatwierdz"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Dialog = QtWidgets.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())

'''

我的程序是:

import os
PyQt5 import QtWidgets
from PyQt5.QtWidgets import QDialog
import sys
from PyQt5 import uic


os.chdir('/home/konrad/Przyklad')                        #Scieżka domyślna do mojego pliku

class Window2(QDialog):                                  # Okno w którym     będę wpisywał dane nieruchomości
    def __init__(self):
        super().__init__()
        uic.loadUi('dodaj.ui', self)




class Ui(QtWidgets.QMainWindow):                         # Okno główne programu
    def __init__(self):
        super(Ui, self).__init__()
        uic.loadUi('nadrzedny.ui', self)

        self.pushButton.clicked.connect(self.okno2)       # zdefiniowany przycisk otwierajacy Window 2
        self.show()

    def okno2(self):
        self.w = Window2()
        self.w.show()

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = Ui()
    sys.exit(app.exec_())

我只是将其打开,但是我不知道如何将输入的文本从一个窗口发送到另一个窗口。

1 个答案:

答案 0 :(得分:0)

尝试一下:

main.py

import sys
import os
import datetime                             # +
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QDialog

#from PyQt5 import uic                      # -
from nadrzedny import Ui_MainWindow         # +
from dodaj     import Ui_Dialog             # +

#os.chdir('/home/konrad/Przyklad')              # Scieżka domyślna do mojego pliku

class Window2(QDialog, Ui_Dialog):          # + Ui_Dialog
    def __init__(self):
        super().__init__()
#        uic.loadUi('dodaj.ui', self)       # -
        self.setupUi(self)                  # +



class Ui(QtWidgets.QMainWindow, Ui_MainWindow):   # + Ui_MainWindow
    def __init__(self):
        super().__init__()

#        uic.loadUi('nadrzedny.ui', self)           # -
        self.setupUi(self)                          # +

        self.pushButton.clicked.connect(self.okno2) # zdefiniowany przycisk otwierajacy Window 2

    def okno2(self):
        self.w = Window2()
        self.w.show()
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv       
        self.w.zatwierdz2.clicked.connect(self.sendText)

    def sendText(self):
        dateTime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
        item = "{} -> {}".format(dateTime, self.w.wpr_dane.text())
        self.listWidget.addItem(QtWidgets.QListWidgetItem(item))
        self.w.hide()  
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = Ui()
    window.show()           # +
    sys.exit(app.exec_())

nadrzedny.py

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.listWidget = QtWidgets.QListWidget(self.centralwidget)
        self.listWidget.setGeometry(QtCore.QRect(70, 110, 301, 331))
        self.listWidget.setObjectName("listWidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(110, 30, 291, 17))
        self.label.setObjectName("label")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(70, 470, 301, 27))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "Lista nieruchomości"))
        self.pushButton.setText(_translate("MainWindow", "Dodaj"))

dodaj.py

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(400, 300)
        self.label = QtWidgets.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(30, 40, 131, 17))
        self.label.setObjectName("label")
        self.wpr_dane = QtWidgets.QLineEdit(Dialog)
        self.wpr_dane.setGeometry(QtCore.QRect(160, 30, 211, 27))
        self.wpr_dane.setObjectName("wpr_dane")
        self.zatwierdz2 = QtWidgets.QPushButton(Dialog)
        self.zatwierdz2.setGeometry(QtCore.QRect(60, 240, 171, 27))
        self.zatwierdz2.setObjectName("zatwierdz2")

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.label.setText(_translate("Dialog", "adres nieruchomości"))
        self.zatwierdz2.setText(_translate("Dialog", "Zatwierdz"))

enter image description here