在QMessageBox中显示Python控制台消息

0 投票
1 回答
1224 浏览
提问于 2025-04-18 08:25

我正在使用 LOAD DATA INFILE command 将文件导入到 MySQL 数据库中。
有些文件可能会出现错误,这时控制台会显示类似下面的信息:

mysql.connector.errors.DatabaseError: 1265 (01000): Data truncated for column 'z' at row x

我该如何把这个错误信息放到一个 QMessageBox 中,这样 .exe 的用户就能知道在哪里查看数据集的问题呢?

try:
   cursor.execute(query)
except:
   QMessageBox.warning(self, "Failure", ...Console Output...)  

1 个回答

1

如果你的SQL库使用的是标准的Python输出,你可以尝试用任何一个有写入方法的对象来替换掉 sys.stderrsys.stdout

import sys

class TextBoxStderr:

    def __init__(self):
        self.textbox = QTextEdit()

    def write(self, errmsg):
        self.textbox.append(errmsg)  

box_stderr = TextBoxStderr()
sys.stderr = box_stderr

# ... Call Import Operation ...

# If any error was appended to the text box, show it
if box_stderr.textbox.toPlainText():
     box_stderr.textbox.show()

发送到stderr的任何文本都会被添加到一个QTextEdit里。确保在操作完成后把原来的对象恢复回来:

sys.sterr = sys.__stderr__

撰写回答