【发布时间】:2018-03-23 14:37:34
【问题描述】:
我正在尝试制作动态小部件并使其可点击。通过单击一个小部件,它应该将动态值传递给其他小部件。我尝试了 sender() 和其他访问小部件的选项,但没有任何效果。 所有小部件都从最后一个小部件发送信息。
下面是代码:
import sys
from PyQt5.QtGui import QIcon, QPixmap
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QPushButton, QLabel, QMessageBox,QSizePolicy, QLayoutItem,QFrame,QHBoxLayout, QGridLayout, QVBoxLayout
from PyQt5.QtCore import QCoreApplication,QSize,QFileInfo
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from functools import partial
from PyQt5.QtCore import pyqtSlot
import sip
class Screen(QWidget):
def __init__(self):
super(Screen, self).__init__()
self.running_layout = QVBoxLayout()
self.action_layout = QVBoxLayout()
self.layout = QHBoxLayout(self)
self.layout.addLayout(self.running_layout)
self.layout.addLayout(self.action_layout)
self.setLayout(self.layout)
self.show()
self.all_running()
self.actions_1('1')
def buttonClicked(self):
sender = self.sender()
print(sender + ' was pressed')
def all_running(self):
for i in range(5):
button = QLabel("btn "+str(i))
button.mouseReleaseEvent = lambda _ : self.actions_1(str(button.text()).split()[1])
self.running_layout.addWidget(button)
button2 = QLabel("btn 5")
button2.mouseReleaseEvent = lambda _ : self.actions_1(str(button2.text()).split()[1])
self.running_layout.addWidget(button2)
def actions_1(self,value):
while not self.action_layout.isEmpty():
print(self.action_layout.isEmpty())
widget = self.action_layout.itemAt(0).widget()
print("removing", widget)
widget.setVisible(False)
self.action_layout.removeWidget(widget)
del widget
self.action_layout = QVBoxLayout()
self.layout.addLayout(self.action_layout)
val = int(value)
for i in range(val):
actions_item = QLabel(str(i))
self.action_layout.addWidget(actions_item)
app = QApplication(sys.argv)
Gui = Screen()
sys.exit(app.exec_())
已编辑:我正在尝试根据需要填充的小部件数量的 int 值将 int 传递给操作。 这个 int 基于我使用 for 循环生成的动态小部件。 例如,如果单击 running_layout “btn 0”的第一个小部件,则 action_layout 中不会有任何小部件,如果单击 running_layout “btn 1”的第二个小部件,则 action_layout 中将有一个小部件“0”,等等基于小部件编号。 我能够发送信号,但无论我点击哪个动态创建的小部件,它都会将最后一个小部件“btn 4”的值 4 发送到 action_layout。
【问题讨论】:
-
你可以详细说明你想做什么。
-
简而言之:如果你按下小部件 btn i 那么在其他布局中应该出现 i-widgets。
-
正是我要找的。span>
-
试试我的解决方案,如果我能帮到你,别忘了把它标记为正确