QTEXTEDIT只初始化时候可以插入文本

一个子窗口可以接受到父窗口传来的参数,但是不可以用文本框插入进来内容,奇怪的是在子窗口初始化时候还可以插入文本,还有子窗口被打开两次后,
关掉
后打开的窗口,第一个窗口就能显示从父窗口传
来的参数了,这是啥臭毛病,请指教!这个有什
么启发吗?
子窗口代码如下

class ChildWindow(QDialog):
    def __init__(self, parent=None):
        super(ChildWindow,self).__init__() 
        self.setWindowFlags(Qt.WindowCloseButtonHint)
        self.setWindowTitle('子窗口')
        self.resize(400, 380)  
        
       # ww='ddsssszz'
        #self.process.insertPlainText(ww)    
        self.initUI()
    def initUI(self):
        self.setWindowFlags(Qt.WindowCloseButtonHint)
        self.setWindowTitle('子窗口')
        self.process = QTextEdit(self)
        self.process.setGeometry(0,0,400,380)
        self.process.insertPlainText('这里可以插入进来')
        form._signal.connect(self.getData)
    def getData(self, parameter):
        parameter=parameter
        #print(parameter) 这里可以打印出从父程序传来的参数
        #print(type(self.process))
        self.process.insertPlainText('这里任何普通的文本不可以插入进来!为何突然失效了')
        self.process.insertPlainText(parameter)#这里变量也插不进来

主窗口代码,它在本例中只起到了传递参数的作用,请查看 btnClicked函数里面的代码

item, offical_name, zw_name, qty, length, width,height,wt,blank,pk_material,plt_num,plt_load = range(12)
class mainwindow(QDialog):
    _signal = QtCore.pyqtSignal(str)
    def __init__(self, parent=None):
        super(mainwindow, self).__init__(parent)
        self.resize(1200, 860)
        self.data_list = []
        self.model = QSqlTableModel(self)
        self.model.setTable("pkg_info_list_db")
        self.model.setSort(item, Qt.AscendingOrder) #可以重新
        self.model.setHeaderData(item, Qt.Horizontal, "缩写")
        self.model.setHeaderData(offical_name, Qt.Horizontal,"产品名")
        self.model.setHeaderData(zw_name, Qt.Horizontal,"中文名")
        self.model.setHeaderData(qty, Qt.Horizontal,"数量")
        self.model.setHeaderData(length, Qt.Horizontal,"长")
        self.model.setHeaderData(width, Qt.Horizontal, "宽")
        self.model.setHeaderData(height, Qt.Horizontal,"高")
        self.model.setHeaderData(wt, Qt.Horizontal,"重量")
        self.model.setHeaderData(blank, Qt.Horizontal,"备注")
        self.model.setHeaderData(pk_material, Qt.Horizontal,"包装材料重")
        self.model.setHeaderData(plt_num, Qt.Horizontal,"托盘装载个数")
        self.model.setHeaderData(plt_load, Qt.Horizontal,"托盘承重")
        self.model.select()
        self.view = QTableView(self)
        self.view.setModel(self.model)
        self.view.setSelectionMode(QTableView.SingleSelection)
        self.view.setSelectionBehavior(QTableView.SelectRows)
        self.view.setColumnHidden(item, False)
        self.view.setColumnWidth(0, 90)  
        self.view.setColumnWidth(1, 270)
        self.view.setColumnWidth(2, 90)  
        self.view.setColumnWidth(3, 60)
        self.view.setColumnWidth(4, 60)  
        self.view.setColumnWidth(5, 60)
        self.view.setColumnWidth(6, 60)  
        self.view.setColumnWidth(7, 60)
        self.view.setColumnWidth(8, 90)  
        self.view.setColumnWidth(9, 60)  
        buttonBox = QDialogButtonBox()
        addButton = buttonBox.addButton("&添加",
            QDialogButtonBox.ActionRole)
        deleteButton = buttonBox.addButton("&Delete",
            QDialogButtonBox.ActionRole)
        copyButton = buttonBox.addButton("&复制添加",
            QDialogButtonBox.ActionRole)   
        sortButton = buttonBox.addButton("&Sort",
            QDialogButtonBox.ActionRole)
        finishButton = buttonBox.addButton("&加载",
            QDialogButtonBox.ActionRole)
        childwindowButton = buttonBox.addButton("&窗口显示",
            QDialogButtonBox.ActionRole)           
       
        menu = QMenu(self)
        sortByCategoryAction = menu.addAction("Sort by &Category")
        sortByDescriptionAction = menu.addAction("Sort by &Description")
        sortByIDAction = menu.addAction("Sort by &ITEM")
        sortButton.setMenu(menu)
        closeButton = buttonBox.addButton(QDialogButtonBox.Close)
        csvButton = buttonBox.addButton("&导出CSV",
            QDialogButtonBox.ActionRole)
        self.layout = QVBoxLayout(self)
        self.layout.addWidget(self.view)
        self.layout.addWidget(buttonBox)
        self.setLayout(self.layout)
        addButton.clicked.connect(self.addRecord)
        copyButton.clicked.connect(self.copyRecord)
        finishButton.clicked.connect(self.add_list)
        deleteButton.clicked.connect(self.deleteRecord)
        sortByCategoryAction.triggered.connect(lambda:self.sort(offical_name))
        sortByDescriptionAction.triggered.connect(lambda:self.sort(offical_name))
        sortByIDAction.triggered.connect(lambda:self.sort(item))
        closeButton.clicked.connect(self.close)
        csvButton.clicked.connect(self.db_csv)
        childwindowButton.clicked.connect(self.btnClicked)
        self.setWindowTitle("新程包装明细表2022-10-25")
        self.setWindowFlags(Qt.WindowMinimizeButtonHint)
        self.view.show()
    def db_csv(self):
        con = sqlite3.connect(database='pkg_info_list_db.db')
        cur=con.cursor()
        cur.execute("SELECT * FROM pkg_info_list_db")  # execute the query
        rows = cur.fetchall()  # collect the data
        wb=Workbook()
        ws=wb.active
        ws.append(['编号', '品名', '中文品名', '数量', '长 ', '宽', '高', \
        '重量', '', '包装材料重量', '托盘装载个数', '托盘装载重量'])
        for rows in rows:
            print(rows)
            ws.append(rows)  # write your SQLite data
        wb.save('./制单基础数据/'+'包装信息.xlsx') 
        data = pd.read_excel('./制单基础数据/'+'包装信息.xlsx')
        data.to_csv('./制单基础数据/'+'包装信息.csv',index=False,encoding='utf_8_sig')
    def copyRecord(self):
        rows = [index.row() for index in self.view.selectionModel().selectedIndexes()]
        print(rows)
        record=[]
        n=-1
        try:
            for row in rows: 
                n+=1
                index = self.view.model().index(row, n)
                data=index.data()
                record.append(data)
            print(record)
        except:
            pass        
        con = sqlite3.connect(database='pkg_info_list_db.db')
        m=record
        cur=con.cursor()
        item, offical_name, zw_name, qty, length, width,height,wt,blank,pk_material,plt_num,plt_load \
        =m[0],m[1],m[2],m[3],m[4],m[5],m[6],m[7],m[8],m[9],m[10],m[11]
        cur.execute("INSERT INTO pkg_info_list_db(item, offical_name, zw_name, qty, length, width,height,wt,blank,pk_material,plt_num,plt_load) VALUES \
            ('{}','{}','{}','{}','{}','{}','{}','{}','{}','{}','{}','{}')"\
            .format(item, offical_name, zw_name, qty, length, width,height,wt,blank,pk_material,plt_num,plt_load))
        con.commit()
        con.close()
        self.view.close()
        self.model = QSqlTableModel(self)
        self.model.setTable("pkg_info_list_db.db")
        self.model.setEditStrategy(QSqlTableModel.OnFieldChange)
        self.model.select()
        self.view = QTableView(self)
        self.view.setModel(self.model)
        self.view.setSelectionMode(QTableView.SingleSelection)
        self.view.setSelectionBehavior(QTableView.SelectRows)
        self.view.show()
        self.layout.addWidget(self.view)
        self.data_list.clear()
        self.view_update()    
    def add_list(self):
        from pr import pkg_info_list
        con = sqlite3.connect(database='pkg_info_list_db.db')
        for m in pkg_info_list:
           cur=con.cursor()
           item, offical_name, zw_name, qty, length, width,height,wt,blank,pk_material,plt_num,plt_load \
          =m[0],m[1],m[2],m[3],m[4],m[5],m[6],m[7],m[8],m[9],m[10],m[11]
           cur.execute("INSERT INTO pkg_info_list_db(item, offical_name, zw_name, qty, length, width,height,wt,blank,pk_material,plt_num,plt_load) VALUES \
            ('{}','{}','{}','{}','{}','{}','{}','{}','{}','{}','{}','{}')"\
            .format(item, offical_name, zw_name, qty, length, width,height,wt,blank,pk_material,plt_num,plt_load))
           cur.close()
           con.commit()
        con.close() 
        self.view_update()
    def view_update(self):
        self.view.close()
        self.model = QSqlTableModel(self)
        self.model.setTable("pkg_info_list_db")
        self.model.setSort(item, Qt.AscendingOrder)
        self.model.setHeaderData(offical_name, Qt.Horizontal, "abb")
        self.model.setHeaderData(zw_name, Qt.Horizontal,"H.S.")
        self.model.setHeaderData(qty, Qt.Horizontal,"price")
        self.model.setHeaderData(length, Qt.Horizontal,"kaipiaoming")
        self.model.setHeaderData(width, Qt.Horizontal,"caigoujia")
        self.model.select()
        self.view = QTableView(self)
        self.view.setModel(self.model)
        self.view.setSelectionMode(QTableView.SingleSelection)
        self.view.setSelectionBehavior(QTableView.SelectRows)
        self.layout.addWidget(self.view) 
        self.view.setColumnWidth(0, 90)  
        self.view.setColumnWidth(1, 270)
        self.view.setColumnWidth(2, 90)  
        self.view.setColumnWidth(3, 60)
        self.view.setColumnWidth(4, 190)  
        self.view.setColumnWidth(5, 60)
        self.view.setColumnWidth(6, 60)  
        self.view.setColumnWidth(7, 60)
        self.view.setColumnWidth(8, 90)  
        self.view.setColumnWidth(9, 60)   
        self.view.show()                    
    def addRecord(self): 
        from add_dialog_pkg import AddDialog
        con = sqlite3.connect(database='pkg_info_list_db.db')
        AddDialog.get_add_dialog(self)
        print(self.data_list)
        for m in self.data_list:
            cur=con.cursor()
            item, offical_name, zw_name, qty, length, width,height,wt,blank,pk_material,plt_num,plt_load\
            =m[0],m[1],m[2],m[3],m[4],m[5],m[6],m[7],m[8],m[9],m[10],m[11]
            cur.execute("INSERT INTO pkg_info_list_db(item, offical_name, zw_name, qty, length, width,height,wt,blank,pk_material,plt_num,plt_load) VALUES \
                 ('{}','{}','{}','{}','{}','{}','{}','{}','{}','{}','{}','{}')"\
                .format(item, offical_name, zw_name, qty, length, width,height,wt,blank,pk_material,plt_num,plt_load))
            cur.close()
            con.commit()
        con.close()
        self.view.close()
        self.model = QSqlTableModel(self)
        self.model.setTable("pkg_info_list_db")
        self.model.setEditStrategy(QSqlTableModel.OnFieldChange)
        self.model.select()
        self.view = QTableView(self)
        self.view.setModel(self.model)
        self.view.setSelectionMode(QTableView.SingleSelection)
        self.view.setSelectionBehavior(QTableView.SelectRows)
        self.view.show()
        self.layout.addWidget(self.view)
        self.data_list.clear()
    def btnClicked(self):
        self.chile_Win = ChildWindow()
        self.chile_Win.show()
        self.chile_Win.update()
        self.chile_Win.exec_()
        data_str ='这是要发送的数据'
        #发送信号
        self._signal.emit(data_str)
    def deleteRecord(self):
        index = self.view.currentIndex()
        if not index.isValid():
            return
        record = self.model.record(index.row())
        category = record.value(item)
        desc = record.value(offical_name)
        if (QMessageBox.question(self, "Reference Data",
            ("Delete {0} from category {1}?"
            .format(desc,category)),
            QMessageBox.Yes|QMessageBox.No) ==
            QMessageBox.No):
            return
        self.model.removeRow(index.row())
        self.model.submitAll()
        self.model.select()
    def sort(self, column):
        self.model.setSort(column, Qt.AscendingOrder)
        self.model.select()
def main():
    app = QApplication(sys.argv)
    filename = os.path.join(os.path.dirname(__file__), "pkg_info_list_db.db")
    create = not QFile.exists(filename)
    db = QSqlDatabase.addDatabase("QSQLITE")
    db.setDatabaseName(filename)
    if not db.open():
        QMessageBox.warning(None, "pkg_info_list_db.db",
        "Database Error: {0}".format(db.lastError().text()))
        sys.exit(1)
    if create:
        print('添加数据。。。。。。。。。。。。。。。。。。')   
    con = sqlite3.connect(database='pkg_info_list_db.db')
    cur=con.cursor()
    sql=("""CREATE TABLE IF NOT EXISTS pkg_info_list_db (
            item VARCHAR(80) NOT NULL,
            offical_name VARCHAR(90) NOT NULL,
            zw_name VARCHAR(90) NOT NULL,
            qty VARCHAR(90) NOT NULL,
            length VARCHAR(90) NOT NULL,
            width VARCHAR(80) NOT NULL,
            height VARCHAR(90) NOT NULL,
            wt VARCHAR(90) NOT NULL,
            blank VARCHAR(90) NOT NULL,
            pk_material VARCHAR(80) NOT NULL,
            plt_num VARCHAR(80) NOT NULL,
            plt_load VARCHAR(90))""")
    cur.execute(sql) 
    cur.close()
    con.commit() 
    con.close() 
    global form
    form = mainwindow()
    form.show()
    app.exec_()
if __name__ == '__main__':
    main()   

谁知道为啥getData函数部分不可以插入任何文本或变量了那,奇怪!请问如何解决? 谢谢!

我觉得是qtextedit输入框在获取父窗口的参数后,失去了输入焦点,导致无法输入,看看能不能重新获取到焦点。

https://blog.51cto.com/xiaohaiwa/5380271

QTextEdit是一个可编辑的多行文本框,如果只能在初始化时插入文本,可能是由于以下原因导致的:

QTextEdit是否被设置为只读。如果是,那么就不能在QTextEdit中插入文本。

代码中是否有误导致了QTextEdit被禁用。

使用的是否是QTextEdit的子类,子类可能有自己的限制

检查是否有其它程序占用了QTextEdit,如果有,需要先关闭或解锁。

5.检查是否在多线程环境下操作了QTextEdit,QT的GUI控件只能在主线程里操作

如果还有问题,请提供更多的细节和代码,以便我们能更好的帮助您。