一个子窗口可以接受到父窗口传来的参数,但是不可以用文本框插入进来内容,奇怪的是在子窗口初始化时候还可以插入文本,还有子窗口被打开两次后,
关掉
后打开的窗口,第一个窗口就能显示从父窗口传
来的参数了,这是啥臭毛病,请指教!这个有什
么启发吗?
子窗口代码如下
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控件只能在主线程里操作
如果还有问题,请提供更多的细节和代码,以便我们能更好的帮助您。