分享

pyqt4之listwidget例子

 Tehero 2014-12-22

环境:

python 2.7.8

pyqt 4.11.1



  1. # coding: utf-8  
  2. from PyQt4.QtGui import *  
  3. from PyQt4.QtCore import *  
  4. import sys  
  5.   
  6.   
  7. class StringListDlg(QDialog):  
  8.     """ 
  9.     主对话框 
  10.     """  
  11.     def __init__(self, fruit, parent=None):  
  12.         super(StringListDlg, self).__init__(parent)  
  13.         self.fruit = fruit  
  14.         #字符串列表  
  15.         self.fruits = QListWidget()  
  16.         #for f in self.fruit:  
  17.         #    self.fruits.addItem(QListWidgetItem(f))  
  18.         self.fruits.addItems(fruit)  
  19.         #按钮  
  20.         btn_add = QPushButton('&Add...')  
  21.         btn_edit = QPushButton('&Edit...')  
  22.         btn_remove = QPushButton('&Remove...')  
  23.         btn_up = QPushButton('&Up')  
  24.         btn_down = QPushButton('&Down')  
  25.         btn_sort = QPushButton('&Sort')  
  26.         btn_close = QPushButton('&Close')  
  27.         #垂直布局  
  28.         v_box = QVBoxLayout()  
  29.         v_box.addWidget(btn_add)  
  30.         v_box.addWidget(btn_edit)  
  31.         v_box.addWidget(btn_remove)  
  32.         v_box.addWidget(btn_up)  
  33.         v_box.addWidget(btn_down)  
  34.         v_box.addWidget(btn_sort)  
  35.         v_box.addStretch(1)  
  36.         v_box.addWidget(btn_close)  
  37.         #水平布局  
  38.         h_box = QHBoxLayout()  
  39.         h_box.addWidget(self.fruits)  
  40.         h_box.addLayout(v_box)  
  41.         #设置布局  
  42.         self.setLayout(h_box)  
  43.         self.resize(QSize(400,300))  
  44.         self.setWindowTitle(u'水果')  
  45.         #连接信号和槽  
  46.         btn_add.clicked.connect(self.add)  
  47.         btn_edit.clicked.connect(self.edit)  
  48.         btn_remove.clicked.connect(self.remove)  
  49.         btn_up.clicked.connect(self.up)  
  50.         btn_down.clicked.connect(self.down)  
  51.         btn_sort.clicked.connect(self.sort)  
  52.         btn_close.clicked.connect(self.close)  
  53.           
  54.     #定义槽  
  55.     def add(self):  
  56.         #添加  
  57.         add = FruitDlg('Add fruit',self)  
  58.         if add.exec_():  
  59.             fruit_added = add.fruit  
  60.             self.fruits.addItem(fruit_added)  
  61.             print(fruit_added)  
  62.           
  63.     def edit(self):  
  64.         #编辑  
  65.         row = self.fruits.currentRow()  
  66.         fruit = self.fruits.takeItem(row)  
  67.         edit = FruitDlg('Edit fruit', fruit.text(), self)  
  68.         if edit.exec_():  
  69.             print(edit.fruit)  
  70.             self.fruits.addItem(edit.fruit)  
  71.           
  72.            
  73.     def remove(self):  
  74.         #移除  
  75.         if QMessageBox.warning(self, u'确认', u'确定要删除?', QMessageBox.Ok | QMessageBox.Cancel) == QMessageBox.Ok:  
  76.             item_deleted = self.fruits.takeItem(self.fruits.currentRow())  
  77.             #将读取的值设置为None  
  78.             item_deleted = None  
  79.   
  80.     def up(self):  
  81.         #上移  
  82.         #当前元素索引  
  83.         index = self.fruits.currentRow()  
  84.         if index > 0:  
  85.             #索引号减1  
  86.             index_new = index - 1  
  87.             #取元素值,并在新索引位置插入  
  88.             self.fruits.insertItem(index_new, self.fruits.takeItem(self.fruits.currentRow()))  
  89.             #设置当前元素索引为新插入位置,可以使得元素连续上移  
  90.             self.fruits.setCurrentRow(index_new)  
  91.               
  92.     def down(self):  
  93.         #下移  
  94.         index = self.fruits.currentRow()  
  95.         if index < self.fruits.count():  
  96.             index_new = index + 1  
  97.             self.fruits.insertItem(index_new, self.fruits.takeItem(self.fruits.currentRow()))  
  98.             self.fruits.setCurrentRow(index_new)  
  99.           
  100.     def sort(self):  
  101.         #排序  
  102.         self.fruits.sortItems(Qt.AscendingOrder)  
  103.     def close(self):  
  104.         #退出  
  105.         self.done(0)  
  106.   
  107.   
  108. #弹出对话框  
  109. #add  
  110. class FruitDlg(QDialog):  
  111.     def __init__(self, title, fruit=None, parent=None):  
  112.         super(FruitDlg, self).__init__(parent)  
  113.         self.setAttribute(Qt.WA_DeleteOnClose)  
  114.           
  115.         #label_0 = QLabel(u'Add fruit: 譬如苹果,香蕉,橘子,西瓜,火龙果,枣,梨子,榴莲')  
  116.         label_0 = QLabel(title)  
  117.         #让标签字换行  
  118.         label_0.setWordWrap(True)  
  119.         self.fruit_edit = QLineEdit(fruit)  
  120.         btns = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)  
  121.         btns.accepted.connect(self.accept)  
  122.         btns.rejected.connect(self.reject)  
  123.           
  124.         validator = QRegExp(r'[^\s][\w\s]+')  
  125.         self.fruit_edit.setValidator(QRegExpValidator(validator, self))  
  126.           
  127.         v_box = QVBoxLayout()  
  128.         v_box.addWidget(label_0)  
  129.         v_box.addWidget(self.fruit_edit)  
  130.         v_box.addWidget(btns)  
  131.         self.setLayout(v_box)  
  132.           
  133.         self.fruit = None  
  134.           
  135.     def accept(self):  
  136.         #OK按钮  
  137.         self.fruit = unicode(self.fruit_edit.text())  
  138.         #self.done(0)  
  139.         QDialog.accept(self)  
  140.       
  141.     def reject(self):  
  142.         #self.done(1)  
  143.         QDialog.reject(self)  
  144.       
  145. #edit  
  146. #remove confirm  
  147.   
  148. if __name__ == '__main__':  
  149.     app = QApplication(sys.argv)  
  150.     fruit = ["Banana""Apple""Elderberry""Clementine""Fig""Guava""Mango""Honeydew Melon",  
  151.              "Date""Watermelon""Tangerine""Ugli Fruit""Juniperberry""Kiwi",  
  152.              "Lemon""Nectarine""Plum""Raspberry""Strawberry""Orange"]  
  153.     s = StringListDlg(fruit)  
  154.     s.show()  
  155.     app.exec_()  



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约