QListWidget deselection and multiple selection - pyqt4

i'm just searching in the docu and can not find the solution for the following two problems with QListWidget:
a) i would like to deselect (deactivate) items in the QListWidget from the software (i mean code)
b) i use multiple selection: setSelectionMode(QAbstractItemView.MultiSelection)
I would like to pre-select more than one item from the code. If i use
setCurrentRow() i can only select on item (it toggles the selected item). How can i do multiple selections?
Your help is very welcome

Both of those could be done with the setSelected method of QListWidgetItems.
# select item
listWidget.item(row).setSelected(True)
# deselect item
listWidget.item(row).setSelected(False)
You can do this for multiple items and as long as you have MultipleSelection enabled, it would select/deselect those items.

Related

VBA - MultiSelect in a DropDown

I have a Requirement Where a bundle of Items needs to be displayed in the Drop-Down List. The Problem for me is, because there are so many Items inside it, I need to Use Combobox over List-Box. The Reason for that is, if I know the name of the item, I can type in the search box of the drop-down and get my Item, Combo-Box allows you to do that. But the List Box doesn't allow the User Input.
Now, Because there are some which names cannot be remembered, I need to use the Scroll bar in the drop-down to pick up the time. This is hectic, to select a single Item. I would like to have the facility of Using a Multi-select in this case.
So the Requirements are below:
1) A Drop-Down that allows the user to type in part of the Input(Say Ref for Refreigerator)
2) A Drop-Down that allows the Multi-select.
Obviously, I don't want to have two drop-downs Splitting the data.
I am open to other Suggestions.
Please Share your thoughts.

VBA Listbox not updating to reflect new source list when called from itself

Edit:
Playing around further, it seems that you can't assign a new array to a listbox via the .list=somelist approach when the assignment happens in response to a click on the listbox itself. Or rather, you can assign the list, but it simply won't visually populate the listbox...although Excel seems to think it's there.
The .additem or .removeitem methods do however result in a visual change when called from a listbox click, which means you have to build your new array up that way I guess. How tedious.
You can however feed a listbox an entirely new array using the .list=somelist approach via a CommandButton-initiated action. But the user has to obviously click a button to do this. Which in my case below defeats the purpose.
Edit Over.
I'm designing a UserForm to help filter PivotTables. It's a cross between the existing Pivot Filter functionality and a Slicer. Here's what you see if you double-click on a PivotField header:
Note the Search field at the top, and the three buttons immediately below that search field. If you type something into that field, then instead of displaying everything that's currently filtered, you instead get a list of any matches, and you can then apply those search results to the underlying PivotTable via those three CommandButtons. The first cb simply filters the PivotTable to reflect the search, and the other two let you add or remove any search result from an existing filter.
I want to do away with those three command buttons, and instead (in the event that a search is performed) simply list those three options at the top of the ListBox above any search results returned. Clicking on those three options will then trigger the exact same code as currently triggered by the Command Button.
Here's how that looks currently if I actually type something in that Search box (Note I haven't yet removed the three command buttons this does away with from that Search frame):
I've added a simple bit of code to the lbResults_Change() event handler that checks if a user clicks any of those first three options. All that code does is trigger the exact same routines as would be triggered if they'd simply clicked on the actual command buttons themselves:
For i = 0 To 4
If Me.lbResults.Selected(i) Then Exit For
Next i
Select Case i
Case 0: cmdApplySearch_Click
Case 1: cmdAddToFilter_Click
Case 2: cmdSubtractFromFilter_Click
Case 3: Me.lbResults.Selected(3) = False
End Select
Here' the problem: The listbox gets updated just fine if I click on those command buttons, as you can see from the below. The Pivot has been filtered accordingly, and those contextual search options have been removed from the top of the listbox (and the search field cleared):
But the listbox does NOT get updated if the exact same routine is triggered from a click on one of those top three options in listbox itself:
As you can see from the above screenshot, it still shows those three options at the top, even though they are NOT in the array that I assigned to the listbox, as evidenced by the screenshot below:
But as you could see from the earlier screenshot, it shows 7 items in the ListBox instead of the three there actually are. But there are indeed just three items that should be showing in that list box:
? .ListCount
3
? .List(0)
263213: ICT Systems Test Engineer
? .List(1)
263299: ICT Support and Test Engineers nec
? .List(2)
839313: Product Tester
Basically, as soon as I try to update what's in the listbox via a click on the listbox itself, I can't update it.
It doesn't seem to matter if I set focus to something other than the listbox before the filtering code executes, and I've even tried completely clearing the Listbox with .clear. It just doesn't clear, until I manually click on one of those command buttons again.
Anyone have any pointers?
Ah, what an idiot I am for overlooking the painfully obvious solution. The ListBox list happily redraws in response to any event other than the ListBox_Click event, right? So all I needed to do was to use the ListBox_Click event to determine what got clicked (as I currently do), and then use the ListBox_MouseUp event to trigger the actual updating of the ListBox list. Works a treat.
Hopefully this post will save someone else two days of pain in the future. Probably me.

Action to deselect every item in a Tab

I'm thinking in creating an action to deselect every item in a Tab, even items selected in pages that you are not seeing.
I'll like to know your opinion about this.
I mean:
If you filter a tab, for example column name start with 'C' and select 2 items and after that you change the filter, column name start with 'X' and select 3 items and after that you clean the filter and apply you'll see all items in the Tab but probably you don't see the items selected. If now you want to change the selection you need to deselect the items selected but, how do you know what items are selected? how do you deselect all items? You can't.
So I'm thinking in creating this action and add it to default actions in list mode.

Sharepoint re-order item order in the list

In the list, I set-up "ID" column and "Title" column.
I added 10 items in the list, and I'm trying to put the 10th item between 1 and 2.
After my research, many people said I can't manually change ID number...
Is there a way to re-order the item?
deleting every items is the only answer?
Please help!
The ID column is an internal identity-like column. You cannot change the value. If you need a column that you can order by (and change), just create a new column called SortOrder or something. Then sort by that column.
I know this is an old post, but I thought this might help someone who might be looking for an OOB answer.
Go into your links list so that you see your List Tools, Items and List at the top.
Select Items.
There is a Change Item Order Icon in the Ribbon. This will allow you to renumber the Links in your list and change the order.
You can manually change the items order if you create your list based on a link list definition. This kind of list allows you to re-order items as you require through a ribbon button. I use this workaround often.
The ID Column is SharePoint inbuilt and you can not change the value of it.
for your solution either you need to delete all item and insert it again or as #Nigel Whatling say you have to add SortColumn
Column Setting will only change the order in the SharePoint List. To change the view order Use the Modify View Selector to adjust the way the fields are sorted. Modify View is found on the ... next to Find and Item Box or If your in the site setting it is under View on the lower 3rd of the page
I also got stuck with this and couldn't use the previous answers as I couldn't see the buttons they spoke of in the ribbon.
I went to List > List Settings in the ribbon. At the bottom of the list settings page I click on a View to edit it (or create new view). Unser the heading Sort you can change the column you wish to sort by and change from descending to ascending etc.
Actually, if I understand the question, it was just what I was trying to accomplish and spent most of my morning working on.
Select the List.
From toolbar, select List under List Tools.
Click List Settings.
Below the listed columns, see Column Ordering
Modify "Position from Top" number and click OK at bottom.
Updated steps:
Select the List.
From toolbar, select List under List Tools.
Click List Settings.
Above the Column list click on the "Item" link
At the bottom of the page select "Column Ordering"
Modify "Position from Top" number and click OK at bottom.

Native PyQt function returning selected QTreeWidgetItems in order of selection?

I have a QTreeWidget which uses the QAbstractItemView.ExtendedSelection property, allowing users to shift click and control click items.
I'd like to preform actions on these items based on the order in which they are selected-- I can think of ways to design my own systems to determine the selection order, but is there a native function/property that will return a list of items sorted via selection order?
Thank you for your advice!
The underlying selection model naturally preserves in the order in which items are selected. So you don't really need to do anything special - just iterate over them like this:
for item in treewidget.selectedItems():
print item.text(0)

Resources