关闭父级崩溃后的Pyqt打开子窗口小部件

时间:2016-05-01 05:22:39

标签: python pyqt4

我正在使用代码http://pastebin.com/3JZWP14y来修复下面代码中的错误。我需要知道启动另一个小部件/对话框以便将文本输入到我的列表的正确方法。

以下是我的原始代码。 我有我的应用程序显示一个表,添加行的子窗口小部件打开并关闭正常,但我父母崩溃。父母的代码如下。子进程用sys.exit关闭(app.exec_())子进程也打开todo.p文件,但关闭所有指向文件的指针。

from PyQt4.QtGui import (QMainWindow, QApplication)
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import pickle as p
import sys
import addit
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 __init__(self):
        #app    = QApplication(sys.argv)
        self.window = QMainWindow()
        self.setupUi(self.window)
        self.window.show()
        #self.d=self.getdata()
        self.d={"12345678":["do some stuff here that needs to be in a large cell to wrap text","1",1],"12343378":["do stuff","1",1]}
        self.setmydata(self.d)
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(296, 478)
        MainWindow.setIconSize(QtCore.QSize(0, 0))
        MainWindow.setAnimated(False)
        MainWindow.setTabShape(QtGui.QTabWidget.Rounded)

        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.tableView = QtGui.QTableWidget(self.centralwidget)
        self.tableView.setGeometry(QtCore.QRect(20, 50, 261, 391))
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.tableView.sizePolicy().hasHeightForWidth())
        self.tableView.setSizePolicy(sizePolicy)
        self.tableView.setEditTriggers(QtGui.QAbstractItemView.AllEditTriggers)
        self.tableView.setDragEnabled(True)
        self.tableView.setAlternatingRowColors(True)
        self.tableView.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)
        self.tableView.setSortingEnabled(False)
        self.tableView.setObjectName(_fromUtf8("tableView"))
        self.pushButton = QtGui.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(20, 10, 121, 31))
        self.pushButton.setObjectName(_fromUtf8("pushButton"))
        self.pushButton_2 = QtGui.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(160, 10, 121, 31))
        self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 296, 21))
        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)
        self.pushButton.clicked.connect(lambda: self.openaddit())
    def openaddit(self):
        x=addit.openwindow()
        print "clean"
        #reload?
            def createfile(self,d):
        f=open('todo.d',"w")
        p.dump(d,f)
        f.close
    def getdata(self):
        if os.path.isfile('todo.p'):
            print "here"
            d= p.load(open('todo.p', 'r'))
        else:
            print "here2"
            d={}
            self.createfile(d)
        print d,"hereeeee"
        return d


    def setmydata(self,d):



        self.data = {}
        keys=d.keys()
        self.data['col1']=keys
        self.data['col2']=[]
        self.tableView.setRowCount(len(keys))
        self.tableView.setColumnCount(2)
        self.tableView.setHorizontalHeaderLabels(['SR', 'Notes'])
        for i in range(0,len(keys)):
            if d[keys[i]][2]==0:
                continue
            self.tableView.setItem(i, 0, QtGui.QTableWidgetItem(keys[i]))
            self.tableView.setItem(i, 1, QtGui.QTableWidgetItem(d[keys[i]][0]))
            self.pushButton = QtGui.QPushButton(self.centralwidget)
            self.tableView.setRowHeight(i,100)
    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
        self.pushButton.setText(_translate("MainWindow", "Add New", None))
        self.pushButton_2.setText(_translate("MainWindow", "Save", None))

app = QApplication(sys.argv)
frame = Ui_MainWindow()
#frame.show()
app.exec_()

addit.openwindow()调用以下程序。

import sys
from PyQt4 import QtCore, QtGui
#import numpy as np
import pickle as p

class MyQDialog(QtGui.QDialog):

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

        ## Default values
        self.d={}
        ## Create labels and buttons

        #self.setObjectName(("Dialog"))
        self.resize(400, 279)
        self.d ={}

        self.buttonBox = QtGui.QDialogButtonBox(self)
        self.buttonBox.setGeometry(QtCore.QRect(30, 240, 341, 32))
        self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
        self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
        self.buttonBox.setObjectName(("buttonBox"))
        self.lineEdit = QtGui.QLineEdit(self)
        self.lineEdit.setGeometry(QtCore.QRect(40, 20, 141, 31))
        self.lineEdit.setObjectName(("lineEdit"))
        self.textEdit = QtGui.QTextEdit(self)
        self.textEdit.setGeometry(QtCore.QRect(20, 60, 361, 161))
        self.textEdit.setObjectName(("textEdit"))
        self.textEdit.setTabChangesFocus(True)
        self.spinBox = QtGui.QSpinBox(self)
        self.spinBox.setGeometry(QtCore.QRect(260, 21, 61, 31))
        self.spinBox.setMinimum(1)
        self.spinBox.setObjectName(("spinBox"))
        self.label = QtGui.QLabel(self)
        self.label.setGeometry(QtCore.QRect(10, 26, 21, 21))
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.label.setFont(font)
        self.label.setObjectName(("label"))
        self.label.setText("SR")
        self.label_2 = QtGui.QLabel(self)
        self.label_2.setGeometry(QtCore.QRect(190, 25, 61, 21))
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.label_2.setFont(font)
        self.label_2.setObjectName(("label_2"))
        self.label_2.setText("Priority")
        self.setTabOrder(self.lineEdit,self.spinBox)
        self.setTabOrder(self.spinBox,self.textEdit)
        self.lineEdit.setFocus(True)



        self.setWindowTitle("Add To Do SR")
        self.show()
    ## Button functions
        QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(("accepted()")), self.build)
        QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(("accepted()")), self.close)
        QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(("rejected()")), self.cancel)

    def cancel(self):
        self.close()
    def save(self):
        #self.close()
        return self.d
    def build(self):
        #if(len(self.lineEdit.text()!=0)
        #print len(self.lineEdit.text())
        self.d["SR"]=str(unicode(self.lineEdit.text().toUtf8(), encoding="UTF-8"))
        self.d["desc"]=str(unicode(self.textEdit.toPlainText().toUtf8(), encoding="UTF-8"))
        self.d["p"]=str(self.spinBox.value())
        #print self.d
        if self.d["SR"]!='':
            #print "saving"
            f= open('todo.p', 'r+')
            load=p.load(f)
            f.close()
            #print load
            tmp2=[]
            tmp2.append(self.d["desc"])
            tmp2.append(self.d["p"])
            tmp2.append(1)
            load[self.d['SR']]=tmp2
            #print tmp
            #print load
            f=open('todo.p','w')
            p.dump(load,f)
            f.close()
            print "closed"
            self.save
        else:
            self.d={}
            return False


def openwindow():
    app = QtGui.QApplication(sys.argv)
    edit_params__QD = MyQDialog()
    edit_params__QD.exec_()
    edit_params__QD.activateWindow()
    if edit_params__QD.result() == 0:
        d= edit_params__QD.save()
        if len(d)==0:
            #print "did not add no SR num"
            return False

    print "exited out"
    #sys.exit(app.exex_())

0 个答案:

没有答案