<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=Qt5_table_grid_%EC%9C%84%EC%A0%AF</id>
	<title>Qt5 table grid 위젯 - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=Qt5_table_grid_%EC%9C%84%EC%A0%AF"/>
	<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=Qt5_table_grid_%EC%9C%84%EC%A0%AF&amp;action=history"/>
	<updated>2026-05-18T00:12:16Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=Qt5_table_grid_%EC%9C%84%EC%A0%AF&amp;diff=41&amp;oldid=prev</id>
		<title>Devcafe: 새 문서: == PyQt5 table grid 위젯 만들기 == === 계산기 샘플 === &lt;source lang=python&gt; import sys from PyQt5.QtWidgets import QWidget, QGridLayout, QPushButton, QApplication   class Example(QWidget):     def __init__(self):         super().__init__()         self.initUI()              def initUI(self):         self.setWindowTitle(&#039;TEST&#039;)         self.setGeometry(150, 150, 100, 300)           window = QGridLayout()           window.addWidget(QPushButton(&quot;CE&quot;), 0, 0)         window...</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=Qt5_table_grid_%EC%9C%84%EC%A0%AF&amp;diff=41&amp;oldid=prev"/>
		<updated>2024-10-04T15:27:32Z</updated>

		<summary type="html">&lt;p&gt;새 문서: == PyQt5 table grid 위젯 만들기 == === 계산기 샘플 === &amp;lt;source lang=python&amp;gt; import sys from PyQt5.QtWidgets import QWidget, QGridLayout, QPushButton, QApplication   class Example(QWidget):     def __init__(self):         super().__init__()         self.initUI()              def initUI(self):         self.setWindowTitle(&amp;#039;TEST&amp;#039;)         self.setGeometry(150, 150, 100, 300)           window = QGridLayout()           window.addWidget(QPushButton(&amp;quot;CE&amp;quot;), 0, 0)         window...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== PyQt5 table grid 위젯 만들기 ==&lt;br /&gt;
=== 계산기 샘플 ===&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
from PyQt5.QtWidgets import QWidget, QGridLayout, QPushButton, QApplication&lt;br /&gt;
 &lt;br /&gt;
class Example(QWidget):&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        super().__init__()&lt;br /&gt;
        self.initUI()&lt;br /&gt;
        &lt;br /&gt;
    def initUI(self):&lt;br /&gt;
        self.setWindowTitle(&amp;#039;TEST&amp;#039;)&lt;br /&gt;
        self.setGeometry(150, 150, 100, 300)&lt;br /&gt;
 &lt;br /&gt;
        window = QGridLayout()&lt;br /&gt;
 &lt;br /&gt;
        window.addWidget(QPushButton(&amp;quot;CE&amp;quot;), 0, 0)&lt;br /&gt;
        window.addWidget(QPushButton(&amp;quot;C&amp;quot;), 0, 1)&lt;br /&gt;
        window.addWidget(QPushButton(&amp;quot;Backspace&amp;quot;), 0, 2)&lt;br /&gt;
        window.addWidget(QPushButton(&amp;quot;/&amp;quot;), 0, 3)&lt;br /&gt;
 &lt;br /&gt;
        window.addWidget(QPushButton(&amp;quot;7&amp;quot;), 1, 0)&lt;br /&gt;
        window.addWidget(QPushButton(&amp;quot;8&amp;quot;), 1, 1)&lt;br /&gt;
        window.addWidget(QPushButton(&amp;quot;9&amp;quot;), 1, 2)&lt;br /&gt;
        window.addWidget(QPushButton(&amp;quot;*&amp;quot;), 1, 3)&lt;br /&gt;
 &lt;br /&gt;
        window.addWidget(QPushButton(&amp;quot;4&amp;quot;), 2, 0)&lt;br /&gt;
        window.addWidget(QPushButton(&amp;quot;5&amp;quot;), 2, 1)&lt;br /&gt;
        window.addWidget(QPushButton(&amp;quot;6&amp;quot;), 2, 2)&lt;br /&gt;
        window.addWidget(QPushButton(&amp;quot;-&amp;quot;), 2, 3)&lt;br /&gt;
 &lt;br /&gt;
        window.addWidget(QPushButton(&amp;quot;1&amp;quot;), 3, 0)&lt;br /&gt;
        window.addWidget(QPushButton(&amp;quot;2&amp;quot;), 3, 1)&lt;br /&gt;
        window.addWidget(QPushButton(&amp;quot;3&amp;quot;), 3, 2)&lt;br /&gt;
        window.addWidget(QPushButton(&amp;quot;+&amp;quot;), 3, 3)&lt;br /&gt;
 &lt;br /&gt;
        window.addWidget(QPushButton(&amp;quot;0&amp;quot;), 4, 1)&lt;br /&gt;
        window.addWidget(QPushButton(&amp;quot;.&amp;quot;), 4, 2)&lt;br /&gt;
        window.addWidget(QPushButton(&amp;quot;=&amp;quot;), 4, 3)&lt;br /&gt;
 &lt;br /&gt;
        self.setLayout(window)&lt;br /&gt;
        self.show()&lt;br /&gt;
 &lt;br /&gt;
if __name__ == &amp;#039;__main__&amp;#039;:&lt;br /&gt;
    app = QApplication(sys.argv)&lt;br /&gt;
    ex = Example()&lt;br /&gt;
    sys.exit(app.exec_())&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 그리드 Oracle/Mysql DB 연결 샘플 ===&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
import cx_Oracle&lt;br /&gt;
# import os &lt;br /&gt;
# os.chdir(&amp;#039;C:\\instantclient-basic-windows.x64-11.2.0.4.0\\instantclient_11_2&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#한글 지원 방법&lt;br /&gt;
import os&lt;br /&gt;
os.putenv(&amp;#039;NLS_LANG&amp;#039;, &amp;#039;AMERICAN_AMERICA.UTF8&amp;#039;)&lt;br /&gt;
# os.putenv(&amp;#039;NLS_LANG&amp;#039;, &amp;#039;AMERICAN_AMERICA.UTF8&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#연결에 필요한 기본 정보 (유저, 비밀번호, 데이터베이스 서버 주소)&lt;br /&gt;
# connection = cx_Oracle.connect(&amp;#039;tba_dba&amp;#039;,&amp;#039;tb@db@@1!&amp;#039;,&amp;#039;XE_TBA/xe&amp;#039;)&lt;br /&gt;
connection = cx_Oracle.connect(&amp;#039;TBA_DBA/tb@db@@1!@10.72.11.151:1521/xe&amp;#039;)&lt;br /&gt;
cursor = connection.cursor()&lt;br /&gt;
&lt;br /&gt;
# cursor.execute(&amp;#039;SELECT OBJECT_NAME FROM TB_DDL_HISTORY&amp;#039;,   texting = &amp;quot;&amp;quot;)&lt;br /&gt;
cursor.execute(&amp;#039;SELECT OBJECT_NAME FROM TB_DDL_HISTORY&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
for name in cursor:&lt;br /&gt;
   print(&amp;quot;테스트 이름 리스트 : &amp;quot;, name)&lt;br /&gt;
&lt;br /&gt;
# 판다스 활용 &lt;br /&gt;
import pandas as pd &lt;br /&gt;
datas = pd.read_sql(sql=&amp;#039;select * from dual&amp;#039;, con = connection) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cursor.close()&lt;br /&gt;
connection.close()&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
import sys&lt;br /&gt;
import cx_Oracle&lt;br /&gt;
#한글 지원 방법&lt;br /&gt;
import os&lt;br /&gt;
os.putenv(&amp;#039;NLS_LANG&amp;#039;, &amp;#039;AMERICAN_AMERICA.UTF8&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from PyQt5 import QtCore, QtGui, QtWidgets, QtSql &lt;br /&gt;
&lt;br /&gt;
class Ui_MainWindow(object):&lt;br /&gt;
&lt;br /&gt;
	def setupUi(self, MainWindow) : &lt;br /&gt;
		# Setting mainwindow &lt;br /&gt;
		MainWindow.setObjectName(&amp;quot;MainWindow&amp;quot;) &lt;br /&gt;
		MainWindow.resize(432, 813) &lt;br /&gt;
		MainWindow.setMinimumSize(QtCore.QSize(432, 813)) &lt;br /&gt;
		MainWindow.setMaximumSize(QtCore.QSize(432, 813)) &lt;br /&gt;
&lt;br /&gt;
		self.centralwidget = QtWidgets.QWidget(MainWindow) &lt;br /&gt;
		self.centralwidget.setObjectName(&amp;quot;centralwidget&amp;quot;) &lt;br /&gt;
		self.frame = QtWidgets.QFrame(self.centralwidget) &lt;br /&gt;
		self.frame.setGeometry(QtCore.QRect(0, 0, 781, 821)) &lt;br /&gt;
		&lt;br /&gt;
		self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel) &lt;br /&gt;
		self.frame.setFrameShadow(QtWidgets.QFrame.Raised) &lt;br /&gt;
		self.frame.setObjectName(&amp;quot;frame&amp;quot;) &lt;br /&gt;
		&lt;br /&gt;
		# setting up the output table &lt;br /&gt;
		self.tableWidget = QtWidgets.QTableWidget(self.frame) &lt;br /&gt;
		self.tableWidget.setGeometry(QtCore.QRect(0, 10, 431, 731)) &lt;br /&gt;
		self.tableWidget.setRowCount(10) &lt;br /&gt;
		self.tableWidget.setColumnCount(2) &lt;br /&gt;
		self.tableWidget.setObjectName(&amp;quot;tableWidget&amp;quot;) &lt;br /&gt;
		&lt;br /&gt;
		# initializing items to be added in the table &lt;br /&gt;
		item = QtWidgets.QTableWidgetItem() &lt;br /&gt;
		item1 = QtWidgets.QTableWidgetItem() &lt;br /&gt;
		# inserting above items to the table &lt;br /&gt;
		self.tableWidget.setHorizontalHeaderItem(0, item) &lt;br /&gt;
		self.tableWidget.setHorizontalHeaderItem(1, item1) &lt;br /&gt;
		self.tableWidget.horizontalHeader().setDefaultSectionSize(185) &lt;br /&gt;
		self.tableWidget.verticalHeader().setMinimumSectionSize(50) &lt;br /&gt;
		MainWindow.setCentralWidget(self.centralwidget) &lt;br /&gt;
&lt;br /&gt;
		self.retranslateUi(MainWindow) &lt;br /&gt;
		QtCore.QMetaObject.connectSlotsByName(MainWindow) &lt;br /&gt;
		&lt;br /&gt;
		# connection to the database &lt;br /&gt;
		# self.QSqlDatabase.addDatabase(&amp;quot;QMYSQL&amp;quot;) &lt;br /&gt;
		# self.db.setHostName(&amp;quot;geeksforgeeks&amp;quot;) &lt;br /&gt;
		# self.db.setDatabaseName(&amp;quot;gfgdb&amp;quot;) &lt;br /&gt;
		# self.db.setUserName(&amp;quot;geeks&amp;quot;) &lt;br /&gt;
		# self.db.setPassword(&amp;quot;gfg&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
		connection = cx_Oracle.connect(&amp;#039;TBA_DBA/tb@db@@1!@10.72.11.151:1521/xe&amp;#039;)&lt;br /&gt;
		cursor = connection.cursor()&lt;br /&gt;
&lt;br /&gt;
		# cursor.execute(&amp;#039;SELECT OBJECT_NAME FROM TB_DDL_HISTORY&amp;#039;,   texting = &amp;quot;&amp;quot;)&lt;br /&gt;
		cursor.execute(&amp;#039;SELECT OBJECT_NAME FROM TB_DDL_HISTORY WHERE ROWNUM &amp;lt;= 5&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
		rows = cursor.fetchall()&lt;br /&gt;
&lt;br /&gt;
		for row in rows:&lt;br /&gt;
		    print(row)&lt;br /&gt;
		# executing MySql query &lt;br /&gt;
		# self.qry = QString(&amp;quot;SELECT * FROM employee&amp;quot;) &lt;br /&gt;
		# self.query = QSqlQuery() &lt;br /&gt;
		# self.query.prepare(self.qry) &lt;br /&gt;
		# self.query.exec() &lt;br /&gt;
&lt;br /&gt;
		# for name in cursor:&lt;br /&gt;
		   # print(&amp;quot;테스트 이름 리스트 : &amp;quot;, name)&lt;br /&gt;
&lt;br /&gt;
		# 판다스 활용 &lt;br /&gt;
		# import pandas as pd &lt;br /&gt;
		# datas = pd.read_sql(sql=&amp;#039;select * from dual&amp;#039;, con = connection) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		# displaying output of query in the table &lt;br /&gt;
		# for row_number, row_data in enumerate(self.query.result()): &lt;br /&gt;
		for row_number, row_data in enumerate(rows): 			&lt;br /&gt;
			for column_number, data in enumerate(row_data): &lt;br /&gt;
				print(&amp;quot;&amp;gt;&amp;gt;&amp;quot;,row_number,column_number,data)&lt;br /&gt;
				self.tableWidget.setItem(row_number, column_number, QtWidgets.QTableWidgetItem(data))&lt;br /&gt;
&lt;br /&gt;
		cursor.close()&lt;br /&gt;
		connection.close()&lt;br /&gt;
&lt;br /&gt;
	def retranslateUi(self, MainWindow) : &lt;br /&gt;
		_translate = QtCore.QCoreApplication.translate &lt;br /&gt;
		MainWindow.setWindowTitle(_translate(&amp;quot;MainWindow&amp;quot;, &amp;quot;List of All Employee(GFGdb)&amp;quot;)) &lt;br /&gt;
		&lt;br /&gt;
		item = self.tableWidget.horizontalHeaderItem(0) &lt;br /&gt;
		item.setText(_translate(&amp;quot;MainWindow&amp;quot;, &amp;quot;NAME&amp;quot;)) &lt;br /&gt;
		item1 = self.tableWidget.horizontalHeaderItem(1) &lt;br /&gt;
		item1.setText(_translate(&amp;quot;MainWindow&amp;quot;, &amp;quot;SALARY&amp;quot;)) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot; : 	&lt;br /&gt;
	import sys &lt;br /&gt;
	app = QtWidgets.QApplication(sys.argv) &lt;br /&gt;
	MainWindow = QtWidgets.QMainWindow() &lt;br /&gt;
	ui = Ui_MainWindow() &lt;br /&gt;
	ui.setupUi(MainWindow) &lt;br /&gt;
	MainWindow.show() &lt;br /&gt;
	sys.exit(app.exec_())&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 테이블 그리드 ===&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
from PyQt5.QtCore import pyqtSlot, Qt&lt;br /&gt;
from PyQt5.QtWidgets import *&lt;br /&gt;
from PyQt5.QtGui import *&lt;br /&gt;
import random&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class MyTable(QWidget):&lt;br /&gt;
    def __init__(self, parent=None):&lt;br /&gt;
        super().__init__(parent)&lt;br /&gt;
&lt;br /&gt;
        self.table = QTableWidget(parent)&lt;br /&gt;
        self._mainwin = parent&lt;br /&gt;
&lt;br /&gt;
        self.__make_layout()&lt;br /&gt;
        self.__make_table()&lt;br /&gt;
&lt;br /&gt;
    def __make_table(self):&lt;br /&gt;
        # self.table.setSelectionBehavior(QTableView.SelectRows)  # multiple row 선택 가능&lt;br /&gt;
        self.table.setSelectionMode(QAbstractItemView.SingleSelection)&lt;br /&gt;
&lt;br /&gt;
        # row, column 갯수 설정해야만 tablewidget 사용할수있다.&lt;br /&gt;
        self.table.setColumnCount(5)&lt;br /&gt;
        self.table.setRowCount(3)&lt;br /&gt;
&lt;br /&gt;
        # column header 명 설정.&lt;br /&gt;
        self.table.setHorizontalHeaderLabels([&amp;quot;코드&amp;quot;, &amp;quot;종목명&amp;quot;])&lt;br /&gt;
        self.table.horizontalHeaderItem(0).setToolTip(&amp;quot;코드...&amp;quot;)  # header tooltip&lt;br /&gt;
        self.table.horizontalHeaderItem(0).setTextAlignment(Qt.AlignRight)  # header 정렬 방식&lt;br /&gt;
&lt;br /&gt;
        header_item = QTableWidgetItem(&amp;quot;추가&amp;quot;)&lt;br /&gt;
        header_item.setBackground(Qt.red)  # 헤더 배경색 설정 --&amp;gt; app.setStyle() 설정해야만 작동한다.&lt;br /&gt;
        self.table.setHorizontalHeaderItem(2, header_item)&lt;br /&gt;
&lt;br /&gt;
        # cell 에 data 입력하기&lt;br /&gt;
        self.table.setItem(0, 0, QTableWidgetItem(&amp;quot;000020&amp;quot;))&lt;br /&gt;
        self.table.setItem(0, 1, QTableWidgetItem(&amp;quot;삼성전자&amp;quot;))&lt;br /&gt;
        self.table.setItem(1, 0, QTableWidgetItem(&amp;quot;000030&amp;quot;))&lt;br /&gt;
        self.table.setItem(1, 1, QTableWidgetItem(&amp;quot;현대차&amp;quot;))&lt;br /&gt;
        self.table.setItem(2, 0, QTableWidgetItem(&amp;quot;000080&amp;quot;))&lt;br /&gt;
        item = QTableWidgetItem(&amp;quot;기아차&amp;quot;)&lt;br /&gt;
        self.table.setItem(2, 1, item)&lt;br /&gt;
        # self.table.resizeColumnsToContents()&lt;br /&gt;
        # self.table.resizeRowsToContents()&lt;br /&gt;
&lt;br /&gt;
        self.table.setEditTriggers(QAbstractItemView.NoEditTriggers)  # edit 금지 모드&lt;br /&gt;
&lt;br /&gt;
        # self.table.setCurrentCell(1, 1)  # current cell 위치 지정하기&lt;br /&gt;
&lt;br /&gt;
        self.table.setColumnWidth(2, 50)&lt;br /&gt;
        ckbox = QCheckBox()&lt;br /&gt;
        self.table.setCellWidget(0, 2, ckbox)&lt;br /&gt;
        ckbox2 = QCheckBox(&amp;#039;me&amp;#039;)&lt;br /&gt;
        self.table.setCellWidget(1, 2, ckbox2)&lt;br /&gt;
&lt;br /&gt;
        mycom = QComboBox()&lt;br /&gt;
        mycom.addItems([&amp;quot;aa&amp;quot;, &amp;quot;dd&amp;quot;, &amp;quot;kk&amp;quot;])&lt;br /&gt;
        mycom.addItem(&amp;quot;cc&amp;quot;)&lt;br /&gt;
        mycom.addItem(&amp;quot;bb&amp;quot;)&lt;br /&gt;
        self.table.setCellWidget(2, 2, mycom)&lt;br /&gt;
&lt;br /&gt;
        item_widget = QPushButton(&amp;quot;test&amp;quot;)&lt;br /&gt;
        self.table.setCellWidget(1, 3, item_widget)&lt;br /&gt;
&lt;br /&gt;
        self.table.cellClicked.connect(self.__mycell_clicked)&lt;br /&gt;
        mycom.currentTextChanged.connect(self.__mycom_text_changed)&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot(int, int)&lt;br /&gt;
    def __mycell_clicked(self, row, col):&lt;br /&gt;
        cell = self.table.item(row, col)&lt;br /&gt;
        # print(cell)&lt;br /&gt;
&lt;br /&gt;
        if cell is not None:&lt;br /&gt;
            txt = &amp;quot;clicked cell = ({0},{1}) ==&amp;gt;{2}&amp;lt;==&amp;quot;.format(row, col, cell.text())&lt;br /&gt;
        else:&lt;br /&gt;
            txt = &amp;quot;clicked cell = ({0},{1}) ==&amp;gt;None type&amp;lt;==&amp;quot;.format(row, col)&lt;br /&gt;
&lt;br /&gt;
        # msg = QMessageBox.information(self, &amp;#039;clicked cell...&amp;#039;, txt)&lt;br /&gt;
        # print(txt)&lt;br /&gt;
        self._mainwin.statusbar.showMessage(txt)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot(str)&lt;br /&gt;
    def __mycom_text_changed(self, txt):&lt;br /&gt;
        msg = QMessageBox.information(self, &amp;#039;combobox changed...&amp;#039;, txt)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    def __make_layout(self):&lt;br /&gt;
        vbox = QVBoxLayout()&lt;br /&gt;
        vbox.addWidget(self.table)&lt;br /&gt;
&lt;br /&gt;
        grid = QGridLayout()&lt;br /&gt;
        vbox.addLayout(grid)&lt;br /&gt;
        # grid.setSpacing(20)&lt;br /&gt;
&lt;br /&gt;
        btn1 = QPushButton(&amp;quot;전체내용 삭제&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn1, 0, 0)&lt;br /&gt;
        btn2 = QPushButton(&amp;quot;table삭제&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn2, 0, 1)&lt;br /&gt;
        btn3 = QPushButton(&amp;quot;selection mode&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn3, 0, 2)&lt;br /&gt;
        btn4 = QPushButton(&amp;quot;column 추가&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn4, 0, 3)&lt;br /&gt;
&lt;br /&gt;
        btn5 = QPushButton(&amp;quot;column 삽입&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn5, 1, 0)&lt;br /&gt;
        btn6 = QPushButton(&amp;quot;column 삭제&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn6, 1, 1)&lt;br /&gt;
        btn7 = QPushButton(&amp;quot;row 추가&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn7, 1, 2)&lt;br /&gt;
        btn8 = QPushButton(&amp;quot;row 삽입&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn8, 1, 3)&lt;br /&gt;
&lt;br /&gt;
        btn9 = QPushButton(&amp;quot;row 삭제&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn9, 2, 0)&lt;br /&gt;
        btn10 = QPushButton(&amp;quot;row 단위선택&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn10, 2, 1)&lt;br /&gt;
        btn11 = QPushButton(&amp;quot;grid line 숨기기&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn11, 2, 2)&lt;br /&gt;
        btn12 = QPushButton(&amp;quot;alternate color&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn12, 2, 3)&lt;br /&gt;
&lt;br /&gt;
        btn13 = QPushButton(&amp;quot;randorm row 선택&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn13, 3, 0)&lt;br /&gt;
        btn14 = QPushButton(&amp;quot;edit&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn14, 3, 1)&lt;br /&gt;
        btn15 = QPushButton(&amp;quot;hide row헤더&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn15, 3, 2)&lt;br /&gt;
        btn16 = QPushButton(&amp;quot;hide column헤더&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn16, 3, 3)&lt;br /&gt;
&lt;br /&gt;
        btn17 = QPushButton(&amp;quot;selected cells&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn17, 4, 0)&lt;br /&gt;
        btn18 = QPushButton(&amp;quot;selected ranges&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn18, 4, 1)&lt;br /&gt;
        btn19 = QPushButton(&amp;quot;current cell 내용&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn19, 4, 2)&lt;br /&gt;
        btn20 = QPushButton(&amp;quot;(0,0) cell 내용&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn20, 4, 3)&lt;br /&gt;
&lt;br /&gt;
        btn21 = QPushButton(&amp;quot;span&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn21, 5, 0)&lt;br /&gt;
        btn22 = QPushButton(&amp;quot;바탕화면 바꾸기&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn22, 5, 1)&lt;br /&gt;
        btn23 = QPushButton(&amp;quot;cell 배경 바꾸기&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn23, 5, 2)&lt;br /&gt;
        btn24 = QPushButton(&amp;quot;선택시 색 변경 &amp;quot;)&lt;br /&gt;
        grid.addWidget(btn24, 5, 3)&lt;br /&gt;
&lt;br /&gt;
        btn25 = QPushButton(&amp;quot;헤더배경색 변경&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn25, 6, 0)&lt;br /&gt;
        btn26 = QPushButton(&amp;quot;(1,2) checkbox 값&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn26, 6, 1)&lt;br /&gt;
        btn27 = QPushButton(&amp;quot;정렬 설정하기&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn27, 6, 2)&lt;br /&gt;
        btn28 = QPushButton(&amp;quot;column, row 숨기기&amp;quot;)&lt;br /&gt;
        grid.addWidget(btn28, 6, 3)&lt;br /&gt;
&lt;br /&gt;
        self.setLayout(vbox)&lt;br /&gt;
&lt;br /&gt;
        self.setGeometry(200, 200, 400, 500)&lt;br /&gt;
        self.setWindowTitle(&amp;quot;tablewidget example&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        btn1.clicked.connect(self.__btn1_clicked)&lt;br /&gt;
        btn2.clicked.connect(self.__btn2_clicked)&lt;br /&gt;
        btn3.clicked.connect(self.__btn3_clicked)&lt;br /&gt;
        btn4.clicked.connect(self.__btn4_clicked)&lt;br /&gt;
        btn5.clicked.connect(self.__btn5_clicked)&lt;br /&gt;
        btn6.clicked.connect(self.__btn6_clicked)&lt;br /&gt;
        btn7.clicked.connect(self.__btn7_clicked)&lt;br /&gt;
        btn8.clicked.connect(self.__btn8_clicked)&lt;br /&gt;
        btn9.clicked.connect(self.__btn9_clicked)&lt;br /&gt;
        btn10.clicked.connect(self.__btn10_clicked)&lt;br /&gt;
        btn11.clicked.connect(self.__btn11_clicked)&lt;br /&gt;
        btn12.clicked.connect(self.__btn12_clicked)&lt;br /&gt;
        btn13.clicked.connect(self.__btn13_clicked)&lt;br /&gt;
        btn14.clicked.connect(self.__btn14_clicked)&lt;br /&gt;
        btn15.clicked.connect(self.__btn15_clicked)&lt;br /&gt;
        btn16.clicked.connect(self.__btn16_clicked)&lt;br /&gt;
        btn17.clicked.connect(self.__btn17_clicked)&lt;br /&gt;
        btn18.clicked.connect(self.__btn18_clicked)&lt;br /&gt;
        btn19.clicked.connect(self.__btn19_clicked)&lt;br /&gt;
        btn20.clicked.connect(self.__btn20_clicked)&lt;br /&gt;
        btn21.clicked.connect(self.__btn21_clicked)&lt;br /&gt;
        btn22.clicked.connect(self.__btn22_clicked)&lt;br /&gt;
        btn23.clicked.connect(self.__btn23_clicked)&lt;br /&gt;
        btn24.clicked.connect(self.__btn24_clicked)&lt;br /&gt;
        btn25.clicked.connect(self.__btn25_clicked)&lt;br /&gt;
        btn26.clicked.connect(self.__btn26_clicked)&lt;br /&gt;
        btn27.clicked.connect(self.__btn27_clicked)&lt;br /&gt;
        btn28.clicked.connect(self.__btn28_clicked)&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn1_clicked(self):&lt;br /&gt;
        self.table.clearContents()  # 헤더는 제거 안함.&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn2_clicked(self):&lt;br /&gt;
        self.table.clear()  # 헤더도 제거함.&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn3_clicked(self):&lt;br /&gt;
        self.table.setSelectionMode(QAbstractItemView.ExtendedSelection)  # drag, Ctrl, Shift 키로 다중 선택 가능.&lt;br /&gt;
        # self.table.setSelectionMode(QAbstractItemView.MultiSelection)&lt;br /&gt;
        # self.table.setSelectionMode(QAbstractItemView.NoSelection)   # 선택 불능.&lt;br /&gt;
        # self.table.setSelectionMode(QAbstractItemView.SingleSelection)  # 다중 선택 불가능.&lt;br /&gt;
        # self.table.setSelectionMode(QAbstractItemView.ContiguousSelection)&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn4_clicked(self):&lt;br /&gt;
        # self.table.setColumnCount(3)  # column 추가.&lt;br /&gt;
        col_count = self.table.columnCount()&lt;br /&gt;
        # print(&amp;quot;col_count = {0}&amp;quot;.format(col_count))&lt;br /&gt;
        self.table.setColumnCount(col_count + 1)&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn5_clicked(self):&lt;br /&gt;
        self.table.insertColumn(1)  # 1 번재 자리에 column 삽입&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn6_clicked(self):&lt;br /&gt;
        self.table.removeColumn(2)  # column 삭제&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn7_clicked(self):&lt;br /&gt;
        row_count = self.table.rowCount()&lt;br /&gt;
        self.table.setRowCount(row_count + 1)  # row 추가&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn8_clicked(self):&lt;br /&gt;
        self.table.insertRow(0)  # 0번재 자리에 row 삽입&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn9_clicked(self):&lt;br /&gt;
        self.table.removeRow(1)  # 1번째 row 삭제&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn10_clicked(self):&lt;br /&gt;
        self.table.setSelectionBehavior(QAbstractItemView.SelectRows)  # row 단위로 선택 가능&lt;br /&gt;
        # self.table.setSelectionBehavior(QAbstractItemView.SelectColumns)  # column 단위로 선택&lt;br /&gt;
        # self.table.setSelectionBehavior(QAbstractItemView.SelectItems)  # cell 단위로 선택 가능&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn11_clicked(self):&lt;br /&gt;
        sender_obj = self.sender()&lt;br /&gt;
        if sender_obj.text() == &amp;quot;grid line 숨기기&amp;quot;:&lt;br /&gt;
            self.table.setShowGrid(False)  # grid line 숨기기&lt;br /&gt;
            sender_obj.setText(&amp;quot;grid line 보이기&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            self.table.setShowGrid(True)  # grid line 숨기기&lt;br /&gt;
            sender_obj.setText(&amp;quot;grid line 숨기기&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn12_clicked(self):&lt;br /&gt;
        sender_obj = self.sender()&lt;br /&gt;
        if sender_obj.text() == &amp;quot;alternate color&amp;quot;:&lt;br /&gt;
            self.table.setAlternatingRowColors(True)&lt;br /&gt;
            sender_obj.setText(&amp;quot;no alternate&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            self.table.setAlternatingRowColors(False)&lt;br /&gt;
            sender_obj.setText(&amp;quot;alternate color&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn13_clicked(self):&lt;br /&gt;
        row_cnt = self.table.rowCount()&lt;br /&gt;
        row_idx = random.randint(0, row_cnt - 1)&lt;br /&gt;
&lt;br /&gt;
        # current SelectionMode 와 SelectionBehavior 모두 row 선택가능하게 되어야만 작동한다.&lt;br /&gt;
        self.table.selectRow(row_idx)  # 해당 index 의 row 선택하기&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn14_clicked(self):&lt;br /&gt;
        sender_obj = self.sender()&lt;br /&gt;
        if sender_obj.text() == &amp;quot;edit&amp;quot;:&lt;br /&gt;
            self.table.setEditTriggers(QAbstractItemView.AllEditTriggers)&lt;br /&gt;
            sender_obj.setText(&amp;quot;no edit&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            self.table.setEditTriggers(QAbstractItemView.NoEditTriggers)  # edit 금지 모드&lt;br /&gt;
            sender_obj.setText(&amp;quot;edit&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn15_clicked(self):&lt;br /&gt;
        sender_obj = self.sender()&lt;br /&gt;
        if sender_obj.text() == &amp;quot;hide row헤더&amp;quot;:&lt;br /&gt;
            self.table.verticalHeader().setVisible(False)  # row header 숨기기&lt;br /&gt;
            sender_obj.setText(&amp;quot;show row헤더&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            self.table.verticalHeader().setVisible(True)  # row header 보이기&lt;br /&gt;
            sender_obj.setText(&amp;quot;hide row헤더&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn16_clicked(self):&lt;br /&gt;
        sender_obj = self.sender()&lt;br /&gt;
        if sender_obj.text() == &amp;quot;hide column헤더&amp;quot;:&lt;br /&gt;
            self.table.horizontalHeader().setVisible(False)  # column header 숨기기&lt;br /&gt;
            sender_obj.setText(&amp;quot;show column헤더&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            self.table.horizontalHeader().setVisible(True)  # column header 보이기&lt;br /&gt;
            sender_obj.setText(&amp;quot;hide column헤더&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn17_clicked(self):&lt;br /&gt;
        aa = self.table.selectedIndexes()&lt;br /&gt;
        cell = set((idx.row(), idx.column()) for idx in aa)&lt;br /&gt;
        # print(cell)&lt;br /&gt;
        txt1 = &amp;quot;selected cells ; {0}&amp;quot;.format(cell)&lt;br /&gt;
        msg = QMessageBox.information(self, &amp;#039;selectedIndexes()...&amp;#039;, txt1)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn18_clicked(self):&lt;br /&gt;
        aa = self.table.selectedRanges()&lt;br /&gt;
        txt = []&lt;br /&gt;
        for idx, sel in enumerate(aa):&lt;br /&gt;
            # print(sel.rowCount(), sel.columnCount(), sel.topRow(), sel.leftColumn(), sel.bottomRow(), sel.rightColumn())&lt;br /&gt;
            tmp = &amp;quot;ranage {0} ; row/col Count={1}/{2} &amp;quot;.format(idx, sel.rowCount(), sel.columnCount()) + \&lt;br /&gt;
                  &amp;quot;({0},{1}) ~ ({2},{3})&amp;quot;.format(sel.topRow(), sel.leftColumn(), sel.bottomRow(), sel.rightColumn())&lt;br /&gt;
            txt.append(tmp)&lt;br /&gt;
        msg = QMessageBox.information(self, &amp;#039;selectedRanges()...&amp;#039;, &amp;#039;\n&amp;#039;.join(txt))&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn19_clicked(self):&lt;br /&gt;
        aa = self.table.currentItem()&lt;br /&gt;
        # print(aa)&lt;br /&gt;
&lt;br /&gt;
        if aa is not None:&lt;br /&gt;
            txt = &amp;quot;row={0}, column={1}, content={2}&amp;quot;.format(aa.row(), aa.column(), aa.text())&lt;br /&gt;
        else:&lt;br /&gt;
            txt = &amp;quot;clicked cell = ({0},{1}) ==&amp;gt;None type&amp;lt;==&amp;quot;.format(self.table.currentRow(), self.table.currentColumn())&lt;br /&gt;
&lt;br /&gt;
        msg = QMessageBox.information(self, &amp;#039;cell 내용&amp;#039;, txt)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn20_clicked(self):&lt;br /&gt;
        item = self.table.item(0, 0)  # (0,0) cell 의 item 가져오기.&lt;br /&gt;
        if item is not None:&lt;br /&gt;
            txt = item.text()&lt;br /&gt;
        else:&lt;br /&gt;
            txt = &amp;quot;no data&amp;quot;&lt;br /&gt;
        msg = QMessageBox.information(self, &amp;quot;(0,0) 내용&amp;quot;, txt)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn21_clicked(self):&lt;br /&gt;
        col_count = self.table.columnCount()&lt;br /&gt;
        self.table.setColumnCount(col_count + 1)&lt;br /&gt;
        self.table.setSpan(1, col_count, 2, 1)  # 2 x 1 크기의 span 생성&lt;br /&gt;
&lt;br /&gt;
        self.table.setCellWidget(1, col_count, QPushButton(&amp;quot;span&amp;quot;))&lt;br /&gt;
        # self.table.resize(500,600)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn22_clicked(self):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        버튼 누를때 마다 임의의 배경화면...&lt;br /&gt;
&lt;br /&gt;
        ** QPalette.Base  ==&amp;gt; text 사용 widget 의 background 로 사용하겠다는 의미.&lt;br /&gt;
        :return:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        palette = QPalette()&lt;br /&gt;
&lt;br /&gt;
        x = random.randint(1, 4)  # 1 &amp;lt;=  x &amp;lt;= 4  사이의 임의의 수&lt;br /&gt;
        if x == 1:&lt;br /&gt;
            palette.setBrush(QPalette.Base, QBrush(QPixmap(&amp;quot;img77.jpg&amp;quot;)))&lt;br /&gt;
        elif x == 2:&lt;br /&gt;
            palette.setColor(QPalette.Base, Qt.yellow)&lt;br /&gt;
        elif x == 3:&lt;br /&gt;
            palette.setColor(QPalette.Base, QColor(255, 255, 255))  # white&lt;br /&gt;
        else:&lt;br /&gt;
            palette.setColor(QPalette.Base, QColor(0, 255, 0))&lt;br /&gt;
&lt;br /&gt;
        self.table.setPalette(palette)  # table 배경 설정&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn23_clicked(self):&lt;br /&gt;
        x = random.randint(1, 3)  # 1 &amp;lt;=  x &amp;lt;= 3  사이의 임의의 수&lt;br /&gt;
        myitem = self.table.item(0, 0)&lt;br /&gt;
        if x == 1:&lt;br /&gt;
            myitem.setBackground(QBrush(QPixmap(&amp;quot;exit.png&amp;quot;)))  # cell 배경&lt;br /&gt;
            myitem.setForeground(QBrush(Qt.red))  # 글자색&lt;br /&gt;
            myitem.setFont(QFont(&amp;quot;Times&amp;quot;, 17, QFont.Bold, italic=True))  # 글자 폰트 설정.&lt;br /&gt;
        elif x == 2:&lt;br /&gt;
            myitem.setBackground(QBrush(Qt.red))&lt;br /&gt;
            myitem.setForeground(QBrush(Qt.yellow))&lt;br /&gt;
            myitem.setFont(QFont(&amp;quot;Helvetica&amp;quot;, 8, QFont.Normal, italic=False))&lt;br /&gt;
        else:&lt;br /&gt;
            myitem.setBackground(QBrush(QColor(0, 255, 0)))&lt;br /&gt;
            myitem.setForeground(QBrush(Qt.blue))&lt;br /&gt;
            myitem.setFont(QFont(&amp;#039;SansSerif&amp;#039;, 25))&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn24_clicked(self):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        ** QPalette.Highlight  ==&amp;gt; item 선택시 배경화면 설정.&lt;br /&gt;
                                    default ; Qt.darkBlue&lt;br /&gt;
&lt;br /&gt;
        ** QPalette.HighlightedText  ==&amp;gt; item 선택시 글자색 설정.&lt;br /&gt;
                                          default ; Qt.white&lt;br /&gt;
        :return:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        palette = QPalette()&lt;br /&gt;
        palette.setColor(QPalette.Highlight, Qt.yellow)  # default ==&amp;gt; Qt.darkBlue&lt;br /&gt;
        palette.setColor(QPalette.HighlightedText, Qt.red)  # default ==&amp;gt; Qt.white&lt;br /&gt;
        self.table.setPalette(palette)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn25_clicked(self):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        ** 헤더 배경색 설정 --&amp;gt; app.setStyle() 설정해야만 작동한다.&lt;br /&gt;
&lt;br /&gt;
        ** 헤더명 설정안하고, Qt 가 자동으로 만든 헤더(숫자)는 인식못한다...&lt;br /&gt;
        :return:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        hitem = self.table.horizontalHeaderItem(1)&lt;br /&gt;
        if hitem is not None:&lt;br /&gt;
            hitem.setBackground(QBrush(Qt.cyan))&lt;br /&gt;
        # print(hitem)&lt;br /&gt;
        # print(hitem.text())&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn26_clicked(self):&lt;br /&gt;
        ckbox = self.table.cellWidget(1, 2)&lt;br /&gt;
        # print(ckbox)&lt;br /&gt;
        if isinstance(ckbox, QCheckBox):&lt;br /&gt;
            if ckbox.isChecked():&lt;br /&gt;
                print(&amp;quot;checked&amp;quot;)&lt;br /&gt;
                _ = QMessageBox.information(self, &amp;#039;checkbox&amp;#039;, &amp;quot;checked&amp;quot;)&lt;br /&gt;
            else:&lt;br /&gt;
                _ = QMessageBox.information(self, &amp;#039;checkbox&amp;#039;, &amp;quot;no checked&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            _ = QMessageBox.information(self, &amp;#039;checkbox&amp;#039;, &amp;quot;checkbox 아닙니다.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn27_clicked(self):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        헤더 click 시에 정렬 가능하게 함.&lt;br /&gt;
        :return:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        sender_obj = self.sender()&lt;br /&gt;
        if sender_obj.text() == &amp;quot;정렬 설정하기&amp;quot;:&lt;br /&gt;
            self.table.setSortingEnabled(True)  # default ; False&lt;br /&gt;
            sender_obj.setText(&amp;quot;정렬 안함&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            self.table.setSortingEnabled(False)&lt;br /&gt;
            sender_obj.setText(&amp;quot;정렬 설정하기&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def __btn28_clicked(self):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        column, row 숨기기&lt;br /&gt;
        :return:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        sender_obj = self.sender()&lt;br /&gt;
        if sender_obj.text() == &amp;quot;column, row 숨기기&amp;quot;:&lt;br /&gt;
            self.table.setColumnHidden(2, True)&lt;br /&gt;
            self.table.setRowHidden(0, True)&lt;br /&gt;
            sender_obj.setText(&amp;quot;column, row 보이기&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            self.table.setColumnHidden(2, False)&lt;br /&gt;
            self.table.setRowHidden(0, False)&lt;br /&gt;
            sender_obj.setText(&amp;quot;column, row 숨기기&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class MyMain(QMainWindow):&lt;br /&gt;
    def __init__(self, parent=None):&lt;br /&gt;
        super().__init__(parent)&lt;br /&gt;
        table = MyTable(self)&lt;br /&gt;
        # table.setStyle(QStyleFactory.create(&amp;#039;Fusion&amp;#039;))&lt;br /&gt;
        self.setCentralWidget(table)&lt;br /&gt;
&lt;br /&gt;
        self.statusbar = self.statusBar()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    import sys&lt;br /&gt;
&lt;br /&gt;
    app = QApplication(sys.argv)&lt;br /&gt;
    app.setStyle(QStyleFactory.create(&amp;#039;Fusion&amp;#039;))  # --&amp;gt; 없으면, 헤더색 변경 안됨.&lt;br /&gt;
&lt;br /&gt;
    # w = MyTable()&lt;br /&gt;
    w = MyMain()&lt;br /&gt;
    w.show()&lt;br /&gt;
    sys.exit(app.exec())&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[category:python]]&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
</feed>