在自定义滚动条中配置PyQ

2024-05-19 15:20:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为PyQt中的图像处理构建一个GUI。我需要做的一个任务是使用滚动条在图像文件目录中移动。具体地说,如果有1000个图像,比如说,在/my/dir中,那么我希望沿着滚动条滚动的距离对应于图像编号(1到1000之间)。所以左边的滚动条是image=1,右边的滚动条是image=1000,如果滚动条是从左到右的33%,那么显示的图像的数值是round(0.33333*1000)=333。在

现在,我有一组可以从目录中绘制图像的窗口小部件,然后有“下一个”和“上一个”按钮,可以用来向前和向后导航。该软件的重点是允许通过深入的人类注释进行监督学习,因此需要快速滚动浏览大量图像,其中没有发生任何有意义的变化。所以我需要滑动条。在

如果整个槽/信号的东西对滚动条和按钮的作用是一样的,我相信我可以通过我的方法来让它操作pixmap图像名称并更新显示的图像。不过,我需要一些基本语法来解释如何创建一个scrollbar类,并将其放在QGridLayout框架上的pixmap下方。在


下面是我通过冲浪和修补补找到的答案

我找到了另一个接口良好的解决方案,尽管我喜欢@Stephen Terry的建议,即实际迭代文件本身。我的解决方案基于这里的教程代码:http://zetcode.com/tutorials/pyqt4/widgets/

我首先创建了一个自己的小类来修改它:

class InterpolatingScrollBar(QtGui.QWidget):

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

        self.testbar = QtGui.QSlider(QtCore.Qt.Horizontal,self)
        self.testbar.setGeometry(10,10,500,30)
        self.testbar.setFocusPolicy(QtCore.Qt.NoFocus)

然后在主控制器类中创建这个类的实例

^{pr2}$

其中max_image_num是通过对glob()执行类似的调用并检查目录中哪些是jpg来计算的。然后我用这段代码连接到滚动条的“值已更改”信号:

    self.connect(self.scrollbar.testbar,QtCore.SIGNAL('valueChanged(int)'),self.getScrollValue)

def getScrollValue(self,value):
        self.overall_counter = value
        self.pb1.previousSlot(self.overall_counter)
        self.nb1.nextSlot(self.overall_counter)
        self.pixmap = QtGui.QPixmap(self.directory_name + self.pb1.new_image_str)
        self.label.setPixmap(self.pixmap)

其中pb1和nb1是'previous button'和'next button',具有更新这些按钮上显示的计数器的相应函数,以及指向要显示的新图像的字符串名称。在


Tags: 图像imageself目录名称信号counter按钮
1条回答
网友
1楼 · 发布于 2024-05-19 15:20:19

最简单的方法是使用一个QListWidget并用你的图像填充它作为QListWidgetItem的图标。一个这样的例子

self.list_widget = QListWidget()
files = glob.glob('YourDirectory/*.jpg') #Get all jpegs in your directory
for i in files:
    self.list_widget.addItem(QListWidgetItem(QIcon(i),'your text here'))
self.list_widget.setIconSize(QSize(400,300)) #Set your image size

这将使您接近您想要的滚动条行为;用户将能够一次看到多个图像,除非您使图像大到足以填满屏幕。希望你能调整它以满足你的需要。在

相关问题 更多 >