PYQT应用程序与python

时间:2017-12-23 20:11:40

标签: python pyqt5

我有两张表格。我需要从Ui_Mainwindow1中的(lineedit)获取文本,并使用该文本在Ui_MainWindow2中创建标签。这两个形式分为两个单独的文件

当我按下(Ui_MainWindow1)中的按钮时,任何人都可以解释如何使用(Ui_Mainwindow1)中的(lineedit)中的文本更新(Ui_MainWindow2)中的标签

> class Ui_MainWindow1(object):
>     def setupUi(self, MainWindow):
>         MainWindow.setObjectName("MainWindow")
>         self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
>         self.lineEdit.setGeometry(QtCore.QRect(130, 70, 181, 21))
>         self.lineEdit.setObjectName("lineEdit")
>         self.pushButton = QtWidgets.QPushButton(self.centralwidget)
>         self.pushButton.setGeometry(QtCore.QRect(140, 100, 161, 23))
>         self.pushButton.setObjectName("pushButton")
>         self.retranslateUi(MainWindow)
>         QtCore.QMetaObject.connectSlotsByName(MainWindow)
> 
>     def retranslateUi(self, MainWindow):
>         _translate = QtCore.QCoreApplication.translate
>         MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
>         self.pushButton.setText(_translate("MainWindow", "update"))
> 
> 
> if __name__ == "__main__":
>     import sys
>     app = QtWidgets.QApplication(sys.argv)
>     MainWindow = QtWidgets.QMainWindow()
>     ui = Ui_MainWindow1()
>     ui.setupUi(MainWindow)
>     MainWindow.show()
>     sys.exit(app.exec_())



class Ui_MainWindow2(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(410, 165)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(160, 40, 111, 21))
        self.label.setText("")
        self.label.setObjectName("label")
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


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

1 个答案:

答案 0 :(得分:0)

amm你可以做的是在一些文件或数据库的帮助下维护两个窗口之间的链接。你可以将pushButton连接到一个插槽,它将使用lineedit中的文本更新文件,你可以添加一个线程函数(可以使用QtCore.QThread)以第二种形式从文件中选取文本并设置为标签的文本。希望它可以解决你的问题,但同时我认为答案也会收到几个下来的投票。

或者,如果您熟悉QSQLDriver,您可以执行更新数据库,使用lineedit文本从文本更改发出信号,并且您可以使用相同的数据库从数据库中读取文本,只要sql数据库发生了变化。我认为对于第二个选项,下面的链接可能会有所帮助

https://stackoverflow.com/a/22919225/7698247

希望有所帮助

我尝试实现第一个选项并成功完成了。我创建了两个文件g1.py和g2.py以及一个文本文件(filename.txt)

g1.py

import sys
from PyQt5 import QtWidgets
from PyQt5.QtGui import QIcon


class Example(QtWidgets.QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):

#        self.setGeometry(300, 300, 300, 220)
        self.setWindowTitle('Icon')
        self.setWindowIcon(QIcon('web.png'))        
        self.lineedit=QtWidgets.QLineEdit()
        self.vlayout=QtWidgets.QVBoxLayout()
        self.vlayout.addWidget(self.lineedit)
        self.lineedit.textChanged.connect(self.updatemy)
        self.setLayout(self.vlayout)
        self.show()

    def updatemy(self,string):
        x=open("filename.txt","w")
        x.write(string)
        x.close()


if __name__ == '__main__':

    app = QtWidgets.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

g2.py

import sys
from PyQt5 import QtWidgets
from PyQt5.QtGui import QIcon
from PyQt5 import QtCore
import threading



class Example(QtWidgets.QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):
        self.val=""
#        self.setGeometry(300, 300, 300, 220)
        self.setWindowTitle('Icon')
        self.setWindowIcon(QIcon('web.png'))        
        self.label=QtWidgets.QLabel()
        self.label.setText("hello")

        self.vlayout=QtWidgets.QVBoxLayout()
        self.vlayout.addWidget(self.label)
        self.setLayout(self.vlayout)
        self.launch_thread()
        self.show()

    def get_content(self):
        while 1:
            x=open("filename.txt","r")
            self.val=x.read()
            x.close()
            self.label.setText(self.val)




    def launch_thread(self):
        myThread=threading.Thread(target=self.get_content)
        myThread.start()                

if __name__ == '__main__':

    app = QtWidgets.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

为了测试它我在下面运行命令:

 def f1():
    os.system("python g1.py")
 def f2():
    os.system("python g2.py")
 a=threading.Thread(target=f1)
 b=threading.Thread(target=f2) 
 a.start()
 b.start()