Note
Go to the end to download the full example code.
12.1.10.8.16. List widget#
This demo shows how to use the auto-connection feature for automatically connecting signals from widgets to methods.
The base requirement for this is, that the ui-file is wrapped by a class in Python.
Hint
This demo uses specially wrapped methods of QListWidget. For more information see section ‘Calling slots’ in https://itom-project.github.io/latest/docs/06_extended_gui/qtdesigner.html)
These methods are indicated by #-> special method call
from itomUi import (
ItomUi,
) # import the base class ItomUi from the module itomUi in the itom-packages subfolder
from itom import ui
class ListWidgetDemo(ItomUi): # ListWidgetDemo is inherited from ItomUi
def __init__(self): # constructor
# call constructor of ItomUi like it would be the constructor of the class itom.ui:
ItomUi.__init__(self, "listWidgetDemo.ui", ui.TYPEWINDOW)
# from now on, you can use the member self.gui to access the handle of the user interface
self.on_btnAddItems_clicked()
@ItomUi.autoslot("") # the signal is clicked()
def on_btnAddItems_clicked(self):
count = self.gui.listMain["count"]
size = 3
newItemTexts = ["item %i" % i for i in range(count, count + size)]
self.gui.listMain.call("addItems", newItemTexts) # -> special method call
# define the flags which parameterize every item in the list (individually, if desired)
# the flag is an OR-combination of the enumeration Qt::ItemFlag
flagSelectable = 1 # Qt::ItemIsSelectable
flagCheckable = 16 # Qt::ItemIsUserCheckable
flagEnabled = 32 # Qt::ItemIsEnabled
flagTristate = 256 # Qt::ItemIsUserTristate
flag1 = (
flagSelectable | flagCheckable | flagEnabled
) # only checkable with on/off state
flag2 = flag1 | flagTristate # checkable with on/off/partially state
# the check state is the state of the checkbox, according Qt::CheckState enumeration
checked = 2 # checked
partially = 1 # partially
unchecked = 0 # unchecked
# set flags of all new items
for i in range(count, count + size):
if i % 2 == 0:
self.gui.listMain.call("setFlags", i, flag1) # -> special method call
self.gui.listMain.call(
"setCheckState", i, checked
) # -> special method call
else:
self.gui.listMain.call("setFlags", i, flag2) # -> special method call
self.gui.listMain.call(
"setCheckState", i, partially
) # -> special method call
@ItomUi.autoslot("") # the signal is clicked()
def on_btnClearAll_clicked(self):
self.gui.listMain.call("clear")
@ItomUi.autoslot("") # connect to clicked() signal of btnEval
def on_btnEval_clicked(self):
count = self.gui.listMain["count"]
for i in range(count):
itemText = self.gui.listMain.call("item", i) # -> special method call
itemFlags = self.gui.listMain.call("flags", i) # -> special method call
checkState = self.gui.listMain.call(
"checkState", i
) # -> special method call
checkStateStr = ["unchecked", "partially", "checked"][checkState]
print(
"Item %i: %s, flags: %i, check state: %s"
% (i, itemText, itemFlags, checkStateStr)
)
@ItomUi.autoslot("int") # the signal is currentRowChanged(int)
def on_listMain_currentRowChanged(self, row):
print("current row changed to row:", row)
# create a first instance of ListWidgetDemo and the gui
win1 = ListWidgetDemo()
win1.gui.show() # show the gui
Total running time of the script: (0 minutes 0.171 seconds)