Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 8 Current »

Name

qtablewidget — spreadsheet-like table with rows and columns

Syntax

qtablewidget [rows columns]

Description

The qtablewidget command creates a QTableWidget object. This is a spreadsheet-like widget which contains editable cells that are arranged in rows and columns. Each cell is numbered according to the row and column position, the upper left corner cell denoted as (0, 0).

The actual cell contents may be either qtablewidgetitem or regular widgets. For simple textual contents using qtablewidgetitems is recommended. Adding and retrieving table items and widgets is done with reference to their row and column position.

Each row and column has a header that by default shows the number for that row or column. The header for a given row or column may also be set using the qsethorizontalheaderlabel and qsetverticalheaderlabel commands.

Populating the table is usually a matter of creating qtablewidgetitem and inserting them into row and column positions using qsetitem.

The table may have a so-called selection set. This is a rectangular area spanning one or more rows and columns. The selection can be created by dragging the cursor using the mouse or keyboard. A selection is identified by the coordinates of the upper left corner and the bottom right corner. This is represented in Tcl by a 4-element list returned by the qselection command:

{ top-left-row top-left-column bottom-right-row bottom-right-column }

To retrieve the selection use the qselection command:

set table [qtable]
...
set selection [qselection $table]

Arguments

rows

The number of rows in the table.

columns

The number of columns in the table.

Examples

Ex.1: Simple Table

# Create toplevel window with table inside
set w [qwidget]
qsetwindowtitle QTableWidget
qvboxlayout {
	set table [qtablewidget 3 3 ] ; # 3 rows and column

	# Create horizontal labels
	qsethorizontalheaderlabel $table 0 "Name"    ; # column 0 
	qsethorizontalheaderlabel $table 1 "Company" ; # column 1
	qsethorizontalheaderlabel $table 2 "Dept"    ; # column 2

	# Insert table items with text. Supply text on construction
	set nameitem [qtablewidgetitem "John Fielding"]
	qsetitem $table 0 0 $nameitem ; # Row 0, column 0

	# Assign text to table item after creating it.
	set companyitem [qtablewidgetitem]
	qsettext $companyitem HAL
	qsetitem $table 0 1 $companyitem

	# Read text in table item
       	set item [qitem $table 0 1] ; # Item in position 0, 1
	set company [qtext $item]
	puts "Company is $company"
}

qshow $w

Example Simple Table shows how to create a simple QTable. Two table items are created and assigned text.

Ex.2: Table with Widgets

# This proc fills in values in the qlineedits corresponding to the
# selection
proc update_selection { } {
	# Retrieve list with corner cells of selection :
	# toprow, topcolumn, bottomrow, bottomcolumn
	set sel [qselection $::table]
	if { $sel == "" } return

	# Now restore each lineedit in turn, setting the text to the proper
	# cell value
	
	qsettext $::toprow [lindex $sel 0]
	qsettext $::leftcol [lindex $sel 1]
	qsettext $::bottomrow [lindex $sel 2]
	qsettext $::rightcol [lindex $sel 3]
	
	# Display state if checked item
	set checkstate [qcheckstate $::checkitem]
	qsettext $::checkinfo $checkstate
}

# Toplevel window
set tablewindow [qwidget ]
qsetattribute deleteonclose
qsetwindowtitle  "Table with Widgets" ; # Title

qhboxlayout {
	
	# Create a table wit 5 rows and columns
	set table [qtablewidget 5 5 ]

	# Give the table a stretchfactor of 100 inside the layout.
	# This will make the table rather than the other widgets stretch when resizing the window
	# 
	qsetstretchfactor $table 100
	
	# Make some headers along top and left
	qsethorizontalheaderlabel $table 0 "Column 0"
	qsethorizontalheaderlabel $table 1 "Column 1"
	qsethorizontalheaderlabel $table 2 "Column 2"
	
	# Create some simple text items
	set item [qtablewidgetitem "First Item"]
	qsetitem $table 0 0 $item
	set checkitem [qtablewidgetitem "Checkable Item"]
	qsetcheckstate $checkitem checked
	qsetitem $table 1 1 $checkitem
	
	# Create disabled item. The item state can be set using
	# one of the following flags :
	# "isselectable", "iseditable", "isdragenabled", "isdropenabled", "isusercheckable", "isenabled", "istristate", "0"
	
	set disableditem [qtablewidgetitem Disabled]
	qsetflags $disableditem 0
	qsetitem $table 1 0 $disableditem
	
	# Create some widgets and insert into table
	set label [qlabel "Label"]
	qsetcellwidget $table 2 2 $label
	
	set combo [qcombobox]
	qadditems $combo { Red Green Blue }
	qsetcellwidget $table 2 0 $combo
	
	# Now create a group of lineedits that show which cells are selected
	 qgroupbox "Selection"

	qgridlayout {
		# The following lines simply make various lineedits
		# and tags them for retrieval in update_selection
		
		qlabel "Top row"
		set toprow [qlineedit]
		qrewindcolumn
		qnextrow
		qlabel "Bottom row"
		set bottomrow [qlineedit]
		qrewindcolumn
		qnextrow
		qlabel "Left col"
		set leftcol [qlineedit]
		qrewindcolumn
		qnextrow
		qlabel "Right col"
		set rightcol [qlineedit]
		qrewindcolumn
		qnextrow
		qlabel "Check state"
		set checkinfo [qlineedit]
		qrewindcolumn
		qnextrow
		
		qpushbutton "Update" { update_selection }
	}	
}

qshow $tablewindow

The example Table with Widgets shows how to retrieve a selection from a QTable. If the selection is non-empty (not "") the selection list is retrieved and the selection coordinates are displayed in separate text fields. Finally the state of the checkbutton is read.

  • No labels