python – 退出/退出PyQt程序的正确方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 退出/退出PyQt程序的正确方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2425字,纯文字阅读大概需要4分钟。
内容图文
![python – 退出/退出PyQt程序的正确方法](/upload/InfoBanner/zyjiaocheng/698/27cc69bec0054918a312bd894e6c7dd2.jpg)
我有一个具有登录屏幕的脚本,如果按下取消按钮,我想完全退出应用程序.我试过3种方法:
> sys.exit()
> QApplication.quit()
> QCoreApplication.instance().quit()
只有1号才有效.另外两个使对话框变白,然后闪烁然后挂起,我甚至无法切换到其他应用程序.我的代码如下:
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtSql import *
from PyQt5.QtWidgets import *
import csv
import sys
from datetime import datetime, timedelta, time
import os
from ci_co_table import *
from login import *
class Ci_Co(QMainWindow):
"""Check in and check out module"""
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
class Login(QDialog):
"""User login """
def __init__(self):
QDialog.__init__(self)
self.ui = Ui_login_form()
self.ui.setupUi(self)
self.ui.buttonBox.accepted.connect(lambda: self.handle_login(servers=servers))
servers = {}
with open('servers.csv', newline='') as csvfile:
server_reader = csv.reader(csvfile)
for row in server_reader:
self.ui.cbo_db_name.addItem(row[1])
servers[row[1]] = (row[0],row[2])
def handle_login(self, servers=''):
global user
global pword
global database
global server
global bg_colour
user = self.ui.username.text()
pword = self.ui.password.text()
database = self.ui.cbo_db_name.currentText()
server = servers[database][0]
bg_colour = servers[database][1]
if __name__=="__main__":
app=QApplication(sys.argv)
global hotdate
global hotdate_string
global folio_num
global user
global pword
global dbase
global server
pword = ""
global database
global bg_colour
#Login
while True:
if Login().exec_() == QDialog.Accepted:
db = QSqlDatabase.addDatabase("QPSQL");
db.setHostName(server)
db.setDatabaseName(database);
db.setUserName(user);
db.setPassword(pword)
if (db.open()==False):
QMessageBox.critical(None, "Database Error", db.lastError().text())
else:
break
else:
#QApplication.quit()
QCoreApplication.instance().quit()
#sys.exit()
myapp = Ci_Co()
myapp.show()
sys.exit(app.exec_())
解决方法:
调用QCoreApplication.quit()与调用QCoreApplication.exit(0)相同.引用qt docs:
After this function has been called, the application leaves the main
event loop and returns from the call to exec(). The exec() function
returns returnCode. If the event loop is not running, this function
does nothing. [emphasis added]
所以quit()或exit()与sys.exit()完全不同.后者将终止程序,但前者只会终止事件循环(如果它正在运行).
当用户取消登录对话框时,您的示例应该只调用sys.exit()来终止程序.否则,您的程序将陷入阻塞的while循环中.
内容总结
以上是互联网集市为您收集整理的python – 退出/退出PyQt程序的正确方法全部内容,希望文章能够帮你解决python – 退出/退出PyQt程序的正确方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。