Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQt4-信号和插槽。将按钮连接到方法时出现问题_Python_Pyqt4 - Fatal编程技术网

Python PyQt4-信号和插槽。将按钮连接到方法时出现问题

Python PyQt4-信号和插槽。将按钮连接到方法时出现问题,python,pyqt4,Python,Pyqt4,我的目标是一个GUI窗口,提示用户输入特定内容。我需要用户打开公司徽标.jpg、测试设置的图片和2.csv数据文件。然后我希望他们输入报告的名称和一些测试设置 我的第一次尝试成功地生成了一个弹出窗口,其中每个项目都有一个按钮。因为我对每个按钮有不同的要求,所以我决定回去分别做每个信号/插槽组合。我希望能够导入图片和数据,并将这些内容分配给变量名。不幸的是,在当前的配置中,我得到的最接近的结果是,它会弹出一个窗口,希望用户在其中选择一个文件,然后它会显示另一个带有按钮的窗口……这不起作用 impo

我的目标是一个GUI窗口,提示用户输入特定内容。我需要用户打开公司徽标.jpg、测试设置的图片和2.csv数据文件。然后我希望他们输入报告的名称和一些测试设置

我的第一次尝试成功地生成了一个弹出窗口,其中每个项目都有一个按钮。因为我对每个按钮有不同的要求,所以我决定回去分别做每个信号/插槽组合。我希望能够导入图片和数据,并将这些内容分配给变量名。不幸的是,在当前的配置中,我得到的最接近的结果是,它会弹出一个窗口,希望用户在其中选择一个文件,然后它会显示另一个带有按钮的窗口……这不起作用

import sys
from PyQt4 import QtGui, QtCore
from PyQt4.QtGui import * #yes, I know I did this above. 
from PyQt4.QtCore import * #However, when I only do the first one, I get errors. Same with the second way.

class CompiledWindow(QtGui.QWidget):
    def __init__(self, parent = None):
        QtGui.QWidget.__init__(self, parent)

        def logo_pic(self):
            global Logo_picture            
            Logo_picture = unicode( QFileDialog.getOpenFileName() )

        self.setWindowTitle('Reasonably named window')
        names = ['Open Logo Picture', 'Open Setup Picture', 'Open first data file', 'Open second data file', 'Enter text about settings', 'Enter other text about settings', 'Enter third setting', 'Enter fourth setting'] 
#this should give you an idea of how many items I need buttons for. I need to open 4 files and have the user enter several bits of text. 
        grid = QtGui.QGridLayout()
        Logo_button = QtGui.QPushButton(names[0])
        self.connect(Logo_button, QtCore.SIGNAL('clicked()'), QtCore.SLOT(logo_pic(self)))        
        grid.addWidget(Logo_button, 0, 0)        
        self.setLayout(grid)       

app = QtGui.QApplication(sys.argv)
cw = CompiledWindow()
cw.show()
sys.exit(app.exec_())
以下是有效的修复方法: -将def徽标_pic移出init -将插槽/信号更改为 Logo_button=QtGui.QPushButton(名称[0])
Logo_按钮。单击。连接(self.Logo_pic)

示例代码中存在几个问题,这些问题已在下面重新编写的版本中修复。希望这能帮助你朝着正确的方向开始

import sys
from PyQt4 import QtGui, QtCore

class CompiledWindow(QtGui.QWidget):
    def __init__(self, parent = None):
        QtGui.QWidget.__init__(self, parent)
        self.setWindowTitle('Reasonably named window')
        names = ['Open Logo Picture', 'Open Setup Picture', 'Open first data file', 'Open second data file', 'Enter text about settings', 'Enter other text about settings', 'Enter third setting', 'Enter fourth setting']
        grid = QtGui.QGridLayout(self)
        self.Logo_button = QtGui.QPushButton(names[0], self)
        self.Logo_button.clicked.connect(self.logo_pic)
        grid.addWidget(self.Logo_button, 0, 0)

    def logo_pic(self):
        self.Logo_picture = unicode(QtGui.QFileDialog.getOpenFileName())
        print(self.Logo_picture)

app = QtGui.QApplication(sys.argv)
cw = CompiledWindow()
cw.show()
sys.exit(app.exec_())

尝试
self.Logo\u按钮。单击。连接(self.Logo\u pic)
并将
Logo\u pic
作为一个实例方法。应该在py3中工作,但不确定py2。什么是实例方法?我正在使用2.7。将
def logo\u pic(self)
def\uuuu init\uuuu
中取出,并将其置于同一级别。谢谢!顺便说一句,最后一行应该是app.exec_389;(),至少对于Python2是这样。7@mauve. 不知道你的意思。对于我来说,使用python-2.7这个示例非常好。您是否忘记导入
sys
模块?我没有。但我在另一个导入中也遇到了这个奇怪的错误……如果不添加“from PyQt4.QtGui import*”,我会在QLineEdit中得到一个未知的命令错误……所以可能发生了其他事情。