Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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 QSlider,带“;武断的;值(来自列表/数组)?_Python_Pyqt_Pyqt5_Qslider - Fatal编程技术网

Python QSlider,带“;武断的;值(来自列表/数组)?

Python QSlider,带“;武断的;值(来自列表/数组)?,python,pyqt,pyqt5,qslider,Python,Pyqt,Pyqt5,Qslider,我最终得到了QSlider的一个子类,如下所示: #通过https://stackoverflow.com/a/49744383/6197439 类ListSlider(QSlider): 定义初始值(self、vallist、*args、**kwargs): QSlider.\uuuuu初始化(self,*args,**kwargs) self.valuelist=vallist self.listvalue=None#为列表的实际值保留(.value()将作为索引) self.setMaxi

我最终得到了QSlider的一个子类,如下所示:

#通过https://stackoverflow.com/a/49744383/6197439
类ListSlider(QSlider):
定义初始值(self、vallist、*args、**kwargs):
QSlider.\uuuuu初始化(self,*args,**kwargs)
self.valuelist=vallist
self.listvalue=None#为列表的实际值保留(.value()将作为索引)
self.setMaximum(len(self.valuelist)-1)
self.valueChanged.connect(self.on\u change\u value)
自我更新更改值(0)
@pyqtSlot(int)
def on_change_值(自身,值):
self.listvalue=self.valuelist[value]
。。。然后,做一些类似的事情:

self.my_list_slider=ListSlider([1,2,4,8,16,32,64,128,256,512,1024,2048],Qt.Horizontal)
...
self.my\u list\u slider.valueChanged.connect(self.self.my\u list\u slider\u valuechange)
...
定义我的列表滑块值更改(自):
curval=self.my\u list\u slider.value()
打印(“my_list_slider{}{}”.format(curval,self.my_list_slider.listvalue))
。。。我猜它是有效的-因为当我拖动滑块时,我会得到一个打印输出:

my_list_slider 0 1
my_list_slider 1 2
my_list_slider 2 4
my_list_slider 3 8
my_list_slider 4 16
my_list_slider 5 32
my_list_slider 6 64
my_list_slider 7 128
...
。。。除此之外,我有点担心必须管理滑块中的两个变量-原始值现在变成索引;我需要的实际值,现在是从基于索引的列表中派生出来的


所以,我想知道——QSlider是否能够以这种方式处理列表(也就是说,我们沿着列表的值滑动,而不仅仅是数字范围)?或者,如果没有,是否有更推荐/更直接的方法来处理具有任意值(即从列表中获取的值)的滑块?

您可以创建一个新信号,该信号发出所选索引及其对应值的信息:

从PyQt5导入QtCore、QtGui、qtwidget
类ListSlider(QtWidgets.QSlider):
elementChanged=QtCore.pyqtSignal(int,int)
定义初始化(self,value=None,*args,**kwargs):
super()
self.setMinimum(0)
self._值=[]
self.valueChanged.connect(self.\u on\u value\u changed)
self.values=值或[]
@财产
def值(自身):
返回self.\u值
@价值观设定者
def值(自身,值):
自我价值=价值
最大值=最大值(0,长度(自身值)-1)
self.setMaximum(最大值)
self.setValue(0)
@QtCore.pyqtSlot(int)
定义值已更改(自身,索引):
值=自身。值[索引]
self.elementChanged.emit(索引,值)
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
app=qtwidts.QApplication(sys.argv)
w=列表滑块(方向=QtCore.Qt.Horizontal)
w、 值=[1,2,4,8,16,32,64,128,256,512,1024,2048]
定义我的列表滑块值更改(索引、值):
打印(“我的列表”滑块“{}{}”。格式(索引,值))
w、 elementChanged.connect(我的列表\u滑块\u值更改)
w、 show()
sys.exit(app.exec_())
很好,谢谢-这(一个新信号)应该会让一切变得更容易!