吴永铎 发表于 2023-7-28 10:44:31

pyqt点击发送按钮程序自动终止

import sys
import PyQt5.QtCoreas qc
import PyQt5.QtWidgets as qw
from test import Ui_MainWindow
from PyQt5.QtWidgets import QMainWindow, QApplication
from tool import Tool

class MyWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
      super(MyWindow, self).__init__()
      self.setupUi(self)
      # 初始化窗口
      self.statusbar.showMessage("status:ok")
      #加载配置文件
      self.settings = qc.QSettings("config.ini", qc.QSettings.IniFormat)
      self.settings.setIniCodec("UTF-8")
      self.config_uart_baud = self.settings.value("SETUP/UART_BAUD", 0, type=int)
      print("uart baud(int) is %d" % self.config_uart_baud)
      self.uart_port = "COM1"
      # 初始化界面
      self.radioButton_recv_ascii.setChecked(True)
      self.radioButton_send_ascii.setChecked(True)
      self.spinBox.setRange(100, 30 * 1000)
      self.spinBox.setSingleStep(100)
      self.spinBox.setWrapping(True)
      self.spinBox.setValue(1000)
      self.comboBox_bote.setCurrentText(str(self.config_uart_baud))
      # 绑定信号与槽
      self.comboBox_bote.currentIndexChanged.connect(self.comboBox_bote_cb)
      self.btn_send.clicked.connect(self.btn_send_cb)
      self.action_start.triggered.connect(self.action_start_cb)
      self.action_pause.triggered.connect(self.action_pause_cb)
      self.action_stop.triggered.connect(self.action_stop_cb)
      self.action_clean.triggered.connect(self.action_clean_cb)
      self.radioButton_recv_ascii.toggled.connect(self.radioButton_recv_ascii_cb)
      self.radioButton_send_ascii.toggled.connect(self.radioButton_send_ascii_cb)
      self.radioButton_recv_hex.toggled.connect(self.radioButton_recv_hex_cb)
      self.radioButton_send_hex.toggled.connect(self.radioButton_send_hex_cb)
      self.checkBox_zidonghuanhang.toggled.connect(self.checkBox_zidonghuanhang_cb)
      self.checkBox_xianshifasong.toggled.connect(self.checkBox_xianshifasong_cb)
      self.checkBox_xianshishijian.toggled.connect(self.checkBox_xianshishijian_cb)
      self.checkBox_chongfufasong.toggled.connect(self.checkBox_chongfufasong_cb)
      self.spinBox.valueChanged.connect(self.spinBox_cb)

      #实例化Tool
      self.tool = Tool(self)



    def comboBox_bote_cb(self):
      content = self.comboBox_bote.currentText()
      print("combox's value is", content)
      text = "您当前选中了%s" % content
      qw.QMessageBox.information(self, "提示", text, qw.QMessageBox.Ok | qw.QMessageBox.Cancel)


    def btn_send_cb(self):
      print("you clicked btn_send.")
      send_data = self.textEdit_get.toPlainText()
      self.tool.uart.send_uart_data(send_data)

    def action_start_cb(self):
      print("you clicked action_start")


    def action_pause_cb(self):
      print("you clicked action_pause")


    def action_stop_cb(self):
      print("you clicked action_stop")


    def action_clean_cb(self):
      print("you clicked action_clean")


    def radioButton_recv_ascii_cb(self):
      print("you selected radioButton_recv_ascii")


    def radioButton_send_ascii_cb(self):
      print("you selected radioButton_send_ascii")

    def radioButton_recv_hex_cb(self):
      print("you selected radioButton_recv_hex")


    def radioButton_send_hex_cb(self):
      print("you selected radioButton_send_hex")



    def checkBox_zidonghuanhang_cb(self):
      print("you selected checkBox_auto_line")
      res_auto_line = self.checkBox_zidonghuanhang.isChecked()
      print("res_auto_line is ", res_auto_line)
      res_show_send = self.checkBox_xianshifasong.isChecked()
      print("res_show_send is ", res_show_send)
      res_show_time = self.checkBox_xianshishijian.isChecked()
      print("res_show_time is ", res_show_time)
      res_repeat_send = self.checkBox_chongfufasong.isChecked()
      print("res_repeat_send is ", res_repeat_send)

    def checkBox_xianshifasong_cb(self):
      print("you selected checkBox_show_send")

    def checkBox_xianshishijian_cb(self):
      print("you selected checkBox_show_time")

    def checkBox_chongfufasong_cb(self):
      print("you selected checkBox_repeat_send")

    def spinBox_cb(self):
      value = self.spinBox.value()
      print("spinBox's current value is ", value)


if __name__ == '__main__':
    app = QApplication(sys.argv)

    myWin = MyWindow()
    myWin.show()
    sys.exit(app.exec_())

isdkz 发表于 2023-7-28 10:44:41

根据提供的代码,似乎没有明显的错误导致程序自动终止。要找出问题,我们可以采取以下步骤:

1. 确认程序崩溃:
   首先,请确保程序真的崩溃了。当程序崩溃时,它通常会输出一些错误信息或调用栈跟踪。请在运行程序时检查控制台输出,看看是否有任何异常信息。

2. 使用try-except捕获异常:
   如果程序确实崩溃了但没有明显的错误信息,请在代码的主体部分(main函数)的最外层添加一个try-except块,以捕获任何可能抛出的异常,并打印异常信息。这样做可以帮助我们找出问题所在。

3. 调试工具:
   如果上述步骤都没有找到问题,可以考虑使用调试工具来逐步执行代码并观察变量值。Python自带了pdb调试器,可以通过在代码中插入 import pdb; pdb.set_trace() 语句来启用。然后运行程序,当执行到这个语句时,程序会暂停,并允许你一步一步地执行代码并检查变量的值。

请尝试以上步骤,并提供更多信息,例如控制台输出或异常信息,以便更好地帮助您解决问题。

陶远航 发表于 2023-7-28 10:45:03

根据您提供的代码,点击发送按钮后程序自动终止可能有以下几个原因:

1. 异常导致程序崩溃:在您的代码中,并没有明显的错误或异常处理机制。如果在btn_send_cb方法中发生异常,程序可能会崩溃并终止执行。建议您在代码中添加异常处理语句,以便捕获并处理潜在的异常。

2. 循环引用导致内存泄漏:在某些场景下,循环引用可能导致内存无法正确释放,最终导致程序崩溃。请确保您的代码中没有明显的循环引用,尤其是在涉及到窗口对象和其他对象之间的引用关系时。

3. PyQt信号与槽连接错误:在您的代码中,信号与槽的连接是通过clicked.connect等方法实现的。如果信号与槽连接错误,可能导致程序在点击发送按钮时无法正常执行相应的槽函数,从而导致程序终止。请确保信号与槽的连接正确并且符合预期。

综上所述,请检查您的代码中是否存在以上问题,并进行相应的修复和调试。如果问题仍然存在,请提供更多详细的错误信息或日志,以便我能够给出更精确的解决方案。
如果问题已经解决,请设置最佳答案
页: [1]
查看完整版本: pyqt点击发送按钮程序自动终止