在两个列表之间启用单个选择

2024-09-30 06:12:15 发布

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

我遇到了这个问题,希望有人能帮我。你知道吗

我试图创建一个场景,其中有两个qlistwidget,List01List02,它们包含以下内容。你知道吗

List01 = [T01, T02, T03]
List02 = [P01, P02, P03]

我希望用户在List01中选择一个项目(T01),因此在List02中,不会进行任何项目的选择(突出显示),这意味着如果用户将鼠标悬停在List02上并选择一个项目(P02),则List01中的选择将消失,而它将是List02中选择的项目(P02)。你知道吗

目前,我得到的问题,我的程序是能够选择一个项目中的两个列表,我不知道如何执行上述。你知道吗

有人能帮我引路吗? 非常感谢


Tags: 项目用户程序列表场景消失p01qlistwidget
3条回答

您可以在此代码上举例:

from PyQt4 import QtCore, QtGui
import sys

app = QtGui.QApplication(sys.argv)

class MyApp(QtGui.QDialog):
  def __init__(self):
    super(MyApp, self).__init__()

    layout = QtGui.QHBoxLayout()

    qlist1 = QtGui.QListWidget()
    qlist1.addItems(["elem1","elem2","elem3"])
    layout.addWidget(qlist1)

    qlist2 = QtGui.QListWidget()
    qlist2.addItems(["elem4","elem5","elem6"])
    layout.addWidget(qlist2)

    # This dict will be used when a list is clicked
    # to clear the selection of the other list
    self.list_dict = {}
    self.list_dict[qlist1] = qlist2
    self.list_dict[qlist2] = qlist1

    qlist1.clicked.connect(self.list_clicked)
    qlist2.clicked.connect(self.list_clicked)

    self.setLayout(layout)
    self.show()

  def list_clicked(self):
    self.list_dict[self.sender()].clearSelection()

myApp = MyApp()
sys.exit(app.exec_())

好的,下面是一个示例代码,说明如何做您想做的事情,这是一个非常基本的代码,但是您可以在函数fg中获得想法,希望它能起作用:

import PyQt4.QtGui as gui


app = gui.QApplication([]) 


w = gui.QWidget()
l = gui.QHBoxLayout(w)
w.setLayout(l)

lis1 = gui.QListWidget()
lis2 = gui.QListWidget()

lis1.addItems(["1","2","3"])
lis2.addItems(["4","5","6"])

def f():    
    lis2.itemSelectionChanged.disconnect(g)    
    for item in lis2.selectedItems():
        lis2.setItemSelected(item,False)
    lis2.itemSelectionChanged.connect(g)


def g():
    lis1.itemSelectionChanged.disconnect(f)    
    for item in lis1.selectedItems():
        lis1.setItemSelected(item,False)    
    lis1.itemSelectionChanged.connect(f)


print dir(lis1.itemSelectionChanged)

lis1.itemSelectionChanged.connect(f)
lis2.itemSelectionChanged.connect(g)

l.addWidget(lis1)
l.addWidget(lis2)

w.show()


app.exec_()

itemSelectionChanged()信号从一个QListWidget连接到另一个clearSelection插槽。你知道吗

使用QtDesigner生成的示例:

# -*- coding: utf-8 -*-

from PyQt4 import QtCore, QtGui

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(214, 158)
        self.gridLayout = QtGui.QGridLayout(Form)
        self.gridLayout.setObjectName("gridLayout")
        self.listWidget = QtGui.QListWidget(Form)
        self.listWidget.setObjectName("listWidget")
        item = QtGui.QListWidgetItem()
        item.setText("T01")
        self.listWidget.addItem(item)
        item = QtGui.QListWidgetItem()
        item.setText("T02")
        self.listWidget.addItem(item)
        item = QtGui.QListWidgetItem()
        item.setText("T03")
        self.listWidget.addItem(item)
        self.gridLayout.addWidget(self.listWidget, 0, 0, 1, 1)
        self.listWidget_2 = QtGui.QListWidget(Form)
        self.listWidget_2.setObjectName("listWidget_2")
        item = QtGui.QListWidgetItem()
        item.setText("P01")
        self.listWidget_2.addItem(item)
        item = QtGui.QListWidgetItem()
        item.setText("P02")
        self.listWidget_2.addItem(item)
        item = QtGui.QListWidgetItem()
        item.setText("P03")
        self.listWidget_2.addItem(item)
        self.gridLayout.addWidget(self.listWidget_2, 0, 1, 1, 1)

        # This are the important lines.
        QtCore.QObject.connect(self.listWidget, QtCore.SIGNAL("itemSelectionChanged()"), self.listWidget_2.clearSelection)
        QtCore.QObject.connect(self.listWidget_2, QtCore.SIGNAL("itemSelectionChanged()"), self.listWidget.clearSelection)
        QtCore.QMetaObject.connectSlotsByName(Form)

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    Form = QtGui.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

相关问题 更多 >

    热门问题