PyQt在对话框和窗口之间传输列表

时间:2016-11-11 07:49:12

标签: python pyqt

非常适合UI方面的初学者!

我正在尝试将对话框中的列表传输到主窗口(按下按钮时),然后在接受对话框时将新列表传回窗口。

这是我正在努力为你提供一个想法的MWE。 它应打印出以下内容,

期望的输出:

[b]
.
[b]
[a]
.
[a]

达到产出:

[b]
.
[b]
[a]
.
[b]

提前致谢! MWE:

import sys
from PyQt4 import QtCore, QtGui#pyqt5, QtWidgets
from Scrabble_gui import Ui_MainWindow
from Input_letters_gui import Ui_Dialog as Popup

class ScrabbleGuiProgram(Ui_MainWindow):
    def __init__(self, dialog):
        Ui_MainWindow.__init__(self)
        self.setupUi(dialog)
        self.In_letters.clicked.connect(self.Input_letters)

    def Input_letters(self):
        """Prints "b" and opens pop up.
            after popup is closed, prints "a"
        """
        letter_list = ["b"]
        #app = QtGui.QApplication(sys.argv)
        print(letter_list)
        print(".")
        PUDialog = QtGui.QDialog()
        pop = Input_letters_popup(PUDialog, letter_list)
        PUDialog.exec_()
        print(".")
        print(letter_list)

class Input_letters_popup(Popup):
    def __init__(self, dialog, letter_list):
        """when open prints incoming list ("b")
        """
        print(letter_list)
        Popup.__init__(self)
        self.setupUi(dialog)
        self.buttonBox.accepted.connect(self.Get_letters)#lambda: self.Get_letters)
        #self.buttonBox.rejected.connect()

    def Get_letters(self):
        """on popup exit prints new list ("a")
        """
        letters = ["a"]
        print(letters)
        return letters

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    Dialog = QtGui.QMainWindow()

    prog = ScrabbleGuiProgram(Dialog)#Input_letters_popup(Dialog)

    Dialog.show()
    sys.exit(app.exec_())    

Scrabble_gui.py

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

# Form implementation generated from reading ui file 'Scrabble.ui'
#
# Created by: PyQt4 UI code generator 4.11.4
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(406, 267)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.Gen_words = QtGui.QPushButton(self.centralwidget)
        self.Gen_words.setGeometry(QtCore.QRect(250, 20, 121, 28))
        self.Gen_words.setObjectName(_fromUtf8("Gen_words"))
        self.Long_word = QtGui.QLineEdit(self.centralwidget)
        self.Long_word.setGeometry(QtCore.QRect(229, 100, 141, 22))
        self.Long_word.setReadOnly(True)
        self.Long_word.setObjectName(_fromUtf8("Long_word"))
        self.label_2 = QtGui.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(279, 180, 41, 21))
        self.label_2.setObjectName(_fromUtf8("label_2"))
        self.label_3 = QtGui.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(99, 143, 131, 21))
        self.label_3.setObjectName(_fromUtf8("label_3"))
        self.High_score = QtGui.QLineEdit(self.centralwidget)
        self.High_score.setGeometry(QtCore.QRect(319, 180, 51, 22))
        self.High_score.setReadOnly(True)
        self.High_score.setObjectName(_fromUtf8("High_score"))
        self.High_word = QtGui.QLineEdit(self.centralwidget)
        self.High_word.setGeometry(QtCore.QRect(229, 143, 141, 22))
        self.High_word.setReadOnly(True)
        self.High_word.setObjectName(_fromUtf8("High_word"))
        self.In_letters = QtGui.QPushButton(self.centralwidget)
        self.In_letters.setGeometry(QtCore.QRect(90, 57, 121, 28))
        self.In_letters.setObjectName(_fromUtf8("In_letters"))
        self.Gen_letters = QtGui.QPushButton(self.centralwidget)
        self.Gen_letters.setGeometry(QtCore.QRect(90, 20, 121, 28))
        self.Gen_letters.setObjectName(_fromUtf8("Gen_letters"))
        self.letters = QtGui.QListWidget(self.centralwidget)
        self.letters.setGeometry(QtCore.QRect(20, 50, 41, 161))
        self.letters.setObjectName(_fromUtf8("letters"))
        self.label = QtGui.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(145, 100, 81, 20))
        self.label.setObjectName(_fromUtf8("label"))
        self.label_4 = QtGui.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(20, 20, 41, 21))
        self.label_4.setObjectName(_fromUtf8("label_4"))
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 406, 26))
        self.menubar.setObjectName(_fromUtf8("menubar"))
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName(_fromUtf8("statusbar"))
        MainWindow.setStatusBar(self.statusbar)

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

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(_translate("MainWindow", "Descrabbler", None))
        self.Gen_words.setText(_translate("MainWindow", "Best Words", None))
        self.label_2.setText(_translate("MainWindow", "Score", None))
        self.label_3.setText(_translate("MainWindow", "Highest Scoring Word", None))
        self.In_letters.setText(_translate("MainWindow", "Input Letters", None))
        self.Gen_letters.setText(_translate("MainWindow", "Generate Letters", None))
        self.label.setText(_translate("MainWindow", "Longest Word", None))
        self.label_4.setText(_translate("MainWindow", "Letters", None))


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

Input_letters_gui.py

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

# Form implementation generated from reading ui file 'Input_letters.ui'
#
# Created by: PyQt4 UI code generator 4.11.4
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName(_fromUtf8("Dialog"))
        Dialog.resize(400, 173)
        self.buttonBox = QtGui.QDialogButtonBox(Dialog)
        self.buttonBox.setGeometry(QtCore.QRect(30, 90, 341, 32))
        self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
        self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
        self.buttonBox.setObjectName(_fromUtf8("buttonBox"))
        self.ltr1 = QtGui.QLineEdit(Dialog)
        self.ltr1.setGeometry(QtCore.QRect(20, 40, 31, 22))
        self.ltr1.setObjectName(_fromUtf8("ltr1"))
        self.ltr2 = QtGui.QLineEdit(Dialog)
        self.ltr2.setGeometry(QtCore.QRect(60, 40, 31, 22))
        self.ltr2.setObjectName(_fromUtf8("ltr2"))
        self.ltr3 = QtGui.QLineEdit(Dialog)
        self.ltr3.setGeometry(QtCore.QRect(100, 40, 31, 22))
        self.ltr3.setObjectName(_fromUtf8("ltr3"))
        self.ltr4 = QtGui.QLineEdit(Dialog)
        self.ltr4.setGeometry(QtCore.QRect(140, 40, 31, 22))
        self.ltr4.setObjectName(_fromUtf8("ltr4"))
        self.ltr5 = QtGui.QLineEdit(Dialog)
        self.ltr5.setGeometry(QtCore.QRect(180, 40, 31, 22))
        self.ltr5.setObjectName(_fromUtf8("ltr5"))
        self.ltr6 = QtGui.QLineEdit(Dialog)
        self.ltr6.setGeometry(QtCore.QRect(220, 40, 31, 22))
        self.ltr6.setObjectName(_fromUtf8("ltr6"))
        self.ltr7 = QtGui.QLineEdit(Dialog)
        self.ltr7.setGeometry(QtCore.QRect(260, 40, 31, 22))
        self.ltr7.setObjectName(_fromUtf8("ltr7"))

        self.retranslateUi(Dialog)
        QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("accepted()")), Dialog.accept)
        QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("rejected()")), Dialog.reject)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(_translate("Dialog", "Input Letters", None))


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

0 个答案:

没有答案