【问题标题】:Cannot execute custom code on pressure of Qt button无法在 Qt 按钮的压力下执行自定义代码
【发布时间】:2015-09-26 07:15:40
【问题描述】:

在 QT Designer 中,我定义了一个按钮 loadValues_btn 并将信号pressed() 关联到自定义插槽 loadValues()

然后在 Python 中,使用 PyQt 库加载 .ui 文件后,我在 MainApplication 类中定义了 loadValues() 方法,以便在单击相同按钮时执行自定义代码。但它不执行代码(我只需要打开一个文件选择器对话框)

我已经用 clicked() 试过了,也没用

这是 MainApplication 类代码:

class Main(QMainWindow, Ui_MainWindow):    
    def __init__(self, ):
        super(Main, self).__init__()
        self.setupUi(self)

   def loadValues():
       filePath = QtGui.QFileDialog.getOpenFileName(parent=self, caption='Open file', directory='.')

if __name__ == '__main__':
   app = QtGui.QApplication(sys.argv)
   main = Main()
   main.show()
   sys.exit(app.exec_())

【问题讨论】:

  • setupUi 应该进行连接。如果没有,那么您可以尝试在 Designer 上修复它(确保您定义了正确的连接),或者您可以自己在代码中进行连接。
  • @hyde 我用 PyQt4 生成了 UI 界面后面的 python 代码,在我看来,loadValues 插槽的信号和插槽已正确连接...
  • 这里是 Ui_MainWindow 类的 setpUi 中的代码: 'class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName(_fromUtf8("MainWindow")) MainWindow.resize( 803, 476) ... self.loadData_btn = QtGui.QPushButton(self.centralWidget) self.loadData_btn.setGeometry(QtCore.QRect(30, 10, 75, 23)) self.loadData_btn.setObjectName(_fromUtf8("loadData_btn") ) ... QtCore.QObject.connect(self.loadData_btn, QtCore.SIGNAL(_fromUtf8("clicked()")), MainWindow.loadValues) ... ' 我不明白错误在哪里:(
  • 我对PyQt了解不多,但是检查应用程序的控制台输出(stderr)是否有连接失败消息,并尝试添加调试打印告诉连接的返回值(应该是真的)。然后你可以编辑问题以在上面的评论中添加内容(并很好地格式化它),这样其他人就更容易看到了。
  • 您发布的代码存在缩进错误,并且还会引发TypeError,因为loadValues 缺少self 参数。除此之外,似乎没有任何问题。 (PS:如果您在 Qt Designer 中进行更改,请不要忘记重新运行 pyuic)。

标签: python-3.x qt-designer qt-signals


【解决方案1】:

感谢大家的支持。实际上,文件对话框并没有出现仅仅是因为......它位于 Spyder 编辑器窗口的后面!!所以它被隐藏了,并没有在我正在开发的 Python 应用程序的主窗口中弹出!!! :( 没用的告诉你,我已经失去了一天的时间来理解问题出在哪里,他妈的 Python !!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多