You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt/PySide二级窗口按钮与LineEdit无响应问题求助

问题原因与修复方案

核心问题

你的二级窗口按钮无响应,根源是两个关键错误:

  1. 主窗口打开二级窗口时,未使用自定义的ChiffrerWindow类,而是直接创建原生QMainWindow并手动初始化UI,导致自定义类里的槽函数绑定代码完全没执行。
  2. ChiffrerWindow类内部错误地重新实例化了Ui_ChiffrerWindow,并且错误地通过这个新实例绑定槽函数,而非绑定到已经加载到窗口上的实际控件。

修复步骤

1. 修改mainwindow.py

导入自定义的ChiffrerWindow类,直接实例化它来打开二级窗口:

from ui_mainwindow import Ui_MainWindow
from chiffrerwindow import ChiffrerWindow
from PyQt5 import QtWidgets

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, app):
        super().__init__()
        self.setupUi(self)
        self.actionChiffrer.triggered.connect(self.ouvrirChiffrer)
        
    def ouvrirChiffrer(self):
        # 直接实例化自定义窗口类,而非手动创建原生QMainWindow
        self.window = ChiffrerWindow(self)
        self.window.show()

注:移除了MainWindow对Ui_ChiffrerWindow的继承,这完全没必要,主窗口只需要继承自身的UI类即可。

2. 修改chiffrerwindow.py

删除多余的Ui_ChiffrerWindow实例化,直接通过self访问控件并绑定槽函数:

from ui_chiffrerwindow import Ui_ChiffrerWindow
from PyQt5 import QtWidgets, QFileDialog

class ChiffrerWindow(QtWidgets.QMainWindow, Ui_ChiffrerWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)  # 执行此方法后,所有UI控件已成为self的属性
        
        # 直接绑定self上的控件与槽函数
        self.pushButtonFileDirCrypt.clicked.connect(self.getFileToEncrypt)
        self.pushButtonPubKeyCrypt.clicked.connect(self.getPubKeyToEncrypt)
    
    def getFileToEncrypt(self):
        fname = QFileDialog.getOpenFileName(self,"Open File","", "All Files (*);; Word Documents (*.docx)")
        if fname[0]:
            self.lineEditFileDirCrypt.setText(fname[0])
    
    def getPubKeyToEncrypt(self):
        print("You want to get the keys to encrypt the file")

说明:

  • setupUi(self)执行后,所有UI控件都直接挂载在self上,无需再通过额外的self.ui实例访问。
  • 添加parent参数可让二级窗口依附于主窗口,关闭主窗口时二级窗口也会自动关闭,更符合桌面应用逻辑。

3. 确保main.py初始化正确

示例main.py代码:

import sys
from PyQt5 import QtWidgets
from mainwindow import MainWindow

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow(app)
    window.show()
    sys.exit(app.exec_())

验证

修改后重新运行程序:

  • 点击主窗口的Chiffrer动作打开二级窗口
  • 点击pushButtonFileDirCrypt会弹出文件选择对话框,选择文件后路径会显示在输入框中
  • 点击pushButtonPubKeyCrypt会在控制台打印指定内容

内容的提问来源于stack exchange,提问作者Ralda00

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 20:45:26