clicked.connect() 不会访问该方法

Posted

技术标签:

【中文标题】clicked.connect() 不会访问该方法【英文标题】:clicked.connect() will not access the method 【发布时间】:2018-02-15 05:09:01 【问题描述】:

我有一个单独的脚本调用这个...我不明白为什么我的按钮点击没有进入相应的功能。我对此很陌生,所以如果您知道答案,您能否向我解释一下,以便我学习。

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class Window (QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.urlEdit = QLineEdit()
        self.windowWid = QWidget()

        urlLabel = QLabel("Enter website to scrape:")
        self.urlEdit.setFixedHeight(30)
        self.urlEdit.setFixedWidth(200)
        layout = QGridLayout(self.windowWid)
        layout.addWidget(urlLabel, 0, 0)
        layout.addWidget(self.urlEdit, 0, 1)
        done = QPushButton("Done",self)

        done.setFixedWidth(60)
        layout.addWidget(done,2,3)
        layout.setRowStretch(4, 1)
        layout.setColumnStretch(4,1)
        done.clicked.connect(self.grabtext)

    def grabtext(self):
        print("CANT REACH HERE")
        answer = self.urlEdit.text()
        print(answer)

【问题讨论】:

你说你有一个单独的脚本来调用它是什么意思?对这段代码的“调用”只会定义类,而不是实例化它。在其当前形式中,代码甚至不会显示您要单击的按钮 该代码显示了按钮和输入框,但单击时不执行任何操作。我的意思是我有scriptA,这个代码是scriptA中的一个方法中的scriptB我说scrapeEmails.Window()来调用类..这是正确的吗?或者我应该让它只是一个函数调用而不是把它放在 scriptB 的类中? @user3419537 上面的评论抱歉忘记标记你 【参考方案1】:

删除此行:self.windowWid = QWidget() 并将layout = QGridLayout(self.windowWid) 更改为layout = QGridLayout(self)

基本上发生的事情是当您调用显示此小部件时,使用self.windowWid = QWidget() 行您正在初始化一个空白 QWidget,然后将您的布局和其他元素分配给此小部件。您希望将这些元素分配给 Window 小部件的实例,这就是您使用 layout = QGridLayout(self) 的原因。

【讨论】:

非常感谢这解决了我的问题,并为我提供了一个很好的、易于理解的解释。我很感激

以上是关于clicked.connect() 不会访问该方法的主要内容,如果未能解决你的问题,请参考以下文章

Qt 正确的 connect() 调用

我不能 clicked.connect() QFormLayout 上的 QPushButton [重复]

PyQt4 - clicked.connect 记住以前的连接?

PySide Qt self.function 在 clicked.connect() 中不起作用

Qt常见控件和操作

Qt常见控件和操作