我正在使用qt designer和一些python代码为QGIS3制作自定义表单,以进行验证。
但是,我在映射按钮动作OK和Cancel时遇到了问题。我首先断开按钮的连接,然后将它们连接到另一个函数以验证表单中的数据。
但是,当我尝试调用close函数(关闭窗口的窗体)时,它只会使窗体消失,但窗口仍然存在
下面是我的代码:
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import QLineEdit, QDialogButtonBox, QComboBox, QLabel, QPushButton
import psycopg2
myDialog = None
cbb_implant = None
Validat = 0
def formOpen(dialog,layerid,featureid):
bdd = psycopg2.connect("host=localhost")
cursor = bdd.cursor()
global myDialog
myDialog = dialog
dialog.hideButtonBox()
global cbb_implant
cbb_implant = dialog.findChild(QComboBox, "cbb_implantation")
cursor.execute('SELECT * FROM l_implantation_type')
fetch = cursor.fetchall()
if len(fetch)>0:
for i in range(0,len(fetch)) :
cbb_implant.addItem(fetch[i][1])
cbb_implant.setCurrentIndex(7)
ok_chem = dialog.findChild(QPushButton, "ok_chem")
ok_chem.clicked.connect(validate)
def validate():
global Validat
if Validat == 0 :
print("HELLO")
Validat = 1
else :
myDialog.save()
myDialog.close()
谢谢你的帮助
发布于 2018-10-05 20:31:06
我发现了另一种关闭整个窗户的方法。
我简单地模拟了退出键按下(通过使用pyautogui模块),它完成了这项工作。
发布于 2019-04-01 02:44:54
你可以试试这段代码
myDialog.parent().close()
这对我很管用
发布于 2019-04-05 04:06:27
希望这能有所帮助:
https://nathanw.net/2011/09/05/qgis-tips-custom-feature-forms-with-python-logic/
from PyQt4.QtCore import *
from PyQt4.QtGui import *
nameField = None
myDialog = None
def formOpen(dialog,layerid,featureid):
global myDialog
myDialog = dialog
global nameField
nameField = dialog.findChild(QLineEdit,"Name")
buttonBox = dialog.findChild(QDialogButtonBox,"buttonBox")
# Disconnect the signal that QGIS has wired up for the dialog to the button box.
buttonBox.accepted.disconnect(myDialog.accept)
# Wire up our own signals.
buttonBox.accepted.connect(validate)
buttonBox.rejected.connect(myDialog.reject)
def validate():
# Make sure that the name field isn't empty.
if not nameField.text().length() > 0:
msgBox = QMessageBox()
msgBox.setText("Name field can not be null.")
msgBox.exec_()
else:
# Return the form as accpeted to QGIS.
myDialog.accept()
https://stackoverflow.com/questions/52628624
复制相似问题