首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >关闭窗口的窗体qgis

关闭窗口的窗体qgis
EN

Stack Overflow用户
提问于 2018-10-03 21:52:49
回答 3查看 748关注 0票数 0

我正在使用qt designer和一些python代码为QGIS3制作自定义表单,以进行验证。

但是,我在映射按钮动作OK和Cancel时遇到了问题。我首先断开按钮的连接,然后将它们连接到另一个函数以验证表单中的数据。

但是,当我尝试调用close函数(关闭窗口的窗体)时,它只会使窗体消失,但窗口仍然存在

下面是我的代码:

代码语言:javascript
复制
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()

谢谢你的帮助

EN

回答 3

Stack Overflow用户

发布于 2018-10-05 20:31:06

我发现了另一种关闭整个窗户的方法。

我简单地模拟了退出键按下(通过使用pyautogui模块),它完成了这项工作。

票数 0
EN

Stack Overflow用户

发布于 2019-04-01 02:44:54

你可以试试这段代码

代码语言:javascript
复制
myDialog.parent().close()

这对我很管用

票数 0
EN

Stack Overflow用户

发布于 2019-04-05 04:06:27

希望这能有所帮助:

https://nathanw.net/2011/09/05/qgis-tips-custom-feature-forms-with-python-logic/

代码语言:javascript
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52628624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档