【发布时间】:2020-02-21 00:59:15
【问题描述】:
很抱歉发了这么长的帖子,但希望尽可能多地给予
这里没有显示很多代码,但我正在尝试清理 PyQt5 Gui 中的大量按钮功能
我有一个 GUI 输出,一切正常,我现在正在尝试删除重复的代码并创建一个函数来创建按钮。
在功能名称 initUI 中,我有大约 20 个按钮。从代码中可以看出,旧的方式是分别创建一个。
我所做的是创建一个将参数发送到的函数,然后创建它们。
除了发送到按钮的 defRun arg 之外,这确实有效。 这是传递对另一个函数的调用我已经用 >>>>arg 突出显示
class iac2tf(QMainWindow):
def __init__(self):
super(iac2tf, self).__init__()
self.initUI()
self.setGeometry(0, 0, 1700, 1000)........
def button (self, buttonName, buttonText, >>>>defRun<<<<, buttonWidth, buttonHeight, buttonx, buttony):
self.buttonName = QtWidgets.QPushButton(buttonText,self)
>>>>self.buttonName.clicked.connect(lambda:self.defRun)<<<<
self.buttonName.resize(buttonWidth,buttonHeight)
self.buttonName.move(buttonx,buttony)
self.buttonName.show()
def initUI(self):
#passed style
self.openFilebutton = self.button('openFile', 'Open File', >>>'open()'<<<< ,110,30,5,50)
#Old style
self.ProcessFile = QtWidgets.QPushButton('Process File',self)
self.ProcessFile.clicked.connect(self.processFile)
self.ProcessFile.resize(110,30)
self.ProcessFile.move(5, 80)
/......
....../
def open(self):
options = QFileDialog.Options()
options |= QFileDialog.DontUseNativeDialog
file, _ = QFileDialog.getOpenFileNames(self, 'Ope.......
app = QApplication(sys.argv)
win = iac2tf()
win.show()
我试过通过知道有些会失败,但想覆盖所有基地并且被激怒了
- str(打开)
GUI 打开
<built-in function open>
点击按钮
File "/home/bob/present/proj/WorksArea/gui.py", line 38, in <lambda>
self.buttonName.clicked.connect(lambda:self.defRun)
AttributeError: 'iac2tf' object has no attribute 'defRun'
- str(open())
self.openFilebutton = self.button('openFile', 'Open File', str(open()) ,110,30,5,50)
TypeError: Required argument 'file' (pos 1) not found
- str(self.open)
GUI 打开
<bound method iac2tf.open of <__main__.iac2tf object at 0x7f87e73da948>>
点击按钮
Traceback (most recent call last):
File "/home/bob/present/proj/WorksArea/gui.py", line 38, in <lambda>
self.buttonName.clicked.connect(lambda:self.defRun)
AttributeError: 'iac2tf' object has no attribute 'defRun'
- str(self.open())
打开文件选择菜单即开始打开功能
- self.open
GUI 启动
<bound method iac2tf.open of <__main__.iac2tf object at 0x7fdcb2dee948>>
点击按钮
Traceback (most recent call last):
File "/home/bob/present/proj/WorksArea/gui.py", line 38, in <lambda>
self.buttonName.clicked.connect(lambda:self.defRun)
AttributeError: 'iac2tf' object has no attribute 'defRun'
- 'self.open'
- 'self.open()'
- 'open()'
- '打开'
无错误打开 GUI
点击按钮
Traceback (most recent call last):
File "/home/bob/present/proj/WorksArea/gui.py", line 38, in <lambda>
self.buttonName.clicked.connect(lambda:self.defRun)
AttributeError: 'iac2tf' object has no attribute 'defRun'
- 打开
用
打开 GUI <built-in function open>
点击按钮
Traceback (most recent call last):
File "/home/bob/present/proj/WorksArea/gui.py", line 38, in <lambda>
self.buttonName.clicked.connect(lambda:self.defRun)
AttributeError: 'iac2tf' object has no attribute 'defRun'
- 打开()
self.openFilebutton = self.button('openFile', 'Open File', open() ,110,30,5,50)
TypeError: Required argument 'file' (pos 1) not found
- 将以上所有内容传递给本地函数 var,但原样:(
【问题讨论】:
-
好的,谢谢,明天再做,谢谢
-
试试:
self.buttonName.clicked.connect(defRun)和self.openFilebutton = self.button('openFile', 'Open File', self.open, 110,30,5,50) -
干杯,会的。你认为 lambda 会跳闸吗?你能解释一下吗(我正在学习)
-
我所说的是一个假设,因为您提供的代码并没有给我必要的保证它可以正常工作,所以我希望您提供我要求您提供更多详细信息的信息。
标签: python-3.x arguments pyqt5