打开APP
未登录
开通VIP,畅享免费电子书等14项超值服
开通VIP
首页
好书
留言交流
下载APP
联系客服
pyqt4之listwidget例子
Tehero
>《Python》
2014.12.22
关注
环境:
python 2.7.8
pyqt 4.11.1
[python]
view plain
copy
# coding: utf-8
from
PyQt4.QtGui
import
*
from
PyQt4.QtCore
import
*
import
sys
class
StringListDlg(QDialog):
"""
主对话框
"""
def
__init__(
self
, fruit, parent=
None
):
super(StringListDlg,
self
).__init__(parent)
self
.fruit = fruit
#字符串列表
self
.fruits = QListWidget()
#for f in self.fruit:
# self.fruits.addItem(QListWidgetItem(f))
self
.fruits.addItems(fruit)
#按钮
btn_add = QPushButton(
'&Add...'
)
btn_edit = QPushButton(
'&Edit...'
)
btn_remove = QPushButton(
'&Remove...'
)
btn_up = QPushButton(
'&Up'
)
btn_down = QPushButton(
'&Down'
)
btn_sort = QPushButton(
'&Sort'
)
btn_close = QPushButton(
'&Close'
)
#垂直布局
v_box = QVBoxLayout()
v_box.addWidget(btn_add)
v_box.addWidget(btn_edit)
v_box.addWidget(btn_remove)
v_box.addWidget(btn_up)
v_box.addWidget(btn_down)
v_box.addWidget(btn_sort)
v_box.addStretch(
1
)
v_box.addWidget(btn_close)
#水平布局
h_box = QHBoxLayout()
h_box.addWidget(
self
.fruits)
h_box.addLayout(v_box)
#设置布局
self
.setLayout(h_box)
self
.resize(QSize(
400
,
300
))
self
.setWindowTitle(u
'水果'
)
#连接信号和槽
btn_add.clicked.connect(
self
.add)
btn_edit.clicked.connect(
self
.edit)
btn_remove.clicked.connect(
self
.remove)
btn_up.clicked.connect(
self
.up)
btn_down.clicked.connect(
self
.down)
btn_sort.clicked.connect(
self
.sort)
btn_close.clicked.connect(
self
.close)
#定义槽
def
add(
self
):
#添加
add = FruitDlg(
'Add fruit'
,
self
)
if
add.exec_():
fruit_added = add.fruit
self
.fruits.addItem(fruit_added)
print
(fruit_added)
def
edit(
self
):
#编辑
row =
self
.fruits.currentRow()
fruit =
self
.fruits.takeItem(row)
edit = FruitDlg(
'Edit fruit'
, fruit.text(),
self
)
if
edit.exec_():
print
(edit.fruit)
self
.fruits.addItem(edit.fruit)
def
remove(
self
):
#移除
if
QMessageBox.warning(
self
, u
'确认'
, u
'确定要删除?'
, QMessageBox.Ok | QMessageBox.Cancel) == QMessageBox.Ok:
item_deleted =
self
.fruits.takeItem(
self
.fruits.currentRow())
#将读取的值设置为None
item_deleted =
None
def
up(
self
):
#上移
#当前元素索引
index =
self
.fruits.currentRow()
if
index >
0
:
#索引号减1
index_new = index -
1
#取元素值,并在新索引位置插入
self
.fruits.insertItem(index_new,
self
.fruits.takeItem(
self
.fruits.currentRow()))
#设置当前元素索引为新插入位置,可以使得元素连续上移
self
.fruits.setCurrentRow(index_new)
def
down(
self
):
#下移
index =
self
.fruits.currentRow()
if
index <
self
.fruits.count():
index_new = index +
1
self
.fruits.insertItem(index_new,
self
.fruits.takeItem(
self
.fruits.currentRow()))
self
.fruits.setCurrentRow(index_new)
def
sort(
self
):
#排序
self
.fruits.sortItems(Qt.AscendingOrder)
def
close(
self
):
#退出
self
.done(
0
)
#弹出对话框
#add
class
FruitDlg(QDialog):
def
__init__(
self
, title, fruit=
None
, parent=
None
):
super(FruitDlg,
self
).__init__(parent)
self
.setAttribute(Qt.WA_DeleteOnClose)
#label_0 = QLabel(u'Add fruit: 譬如苹果,香蕉,橘子,西瓜,火龙果,枣,梨子,榴莲')
label_0 = QLabel(title)
#让标签字换行
label_0.setWordWrap(
True
)
self
.fruit_edit = QLineEdit(fruit)
btns = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
btns.accepted.connect(
self
.accept)
btns.rejected.connect(
self
.reject)
validator = QRegExp(r
'[^\s][\w\s]+'
)
self
.fruit_edit.setValidator(QRegExpValidator(validator,
self
))
v_box = QVBoxLayout()
v_box.addWidget(label_0)
v_box.addWidget(
self
.fruit_edit)
v_box.addWidget(btns)
self
.setLayout(v_box)
self
.fruit =
None
def
accept(
self
):
#OK按钮
self
.fruit = unicode(
self
.fruit_edit.text())
#self.done(0)
QDialog.accept(
self
)
def
reject(
self
):
#self.done(1)
QDialog.reject(
self
)
#edit
#remove confirm
if
__name__ ==
'__main__'
:
app = QApplication(sys.argv)
fruit = [
"Banana"
,
"Apple"
,
"Elderberry"
,
"Clementine"
,
"Fig"
,
"Guava"
,
"Mango"
,
"Honeydew Melon"
,
"Date"
,
"Watermelon"
,
"Tangerine"
,
"Ugli Fruit"
,
"Juniperberry"
,
"Kiwi"
,
"Lemon"
,
"Nectarine"
,
"Plum"
,
"Raspberry"
,
"Strawberry"
,
"Orange"
]
s = StringListDlg(fruit)
s.show()
app.exec_()
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报
。
打开APP,阅读全文并永久保存
查看更多类似文章
猜你喜欢
类似文章
PyQt5基础知识 超详细!!!(含代码)
PyQt5执行耗时操作导致主页面暂时性卡死问题
pyqt中各种消息框的使用
【第三节】PyQt5布局管理
Python PyQt5干货满满小项目轻松实现高效抠图去背景
PyQt5之布局管理
更多类似文章 >>
生活服务
热点新闻
留言交流
回顶部
联系我们
分享
收藏
点击这里,查看已保存的文章
导长图
关注
一键复制
下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!
联系客服
微信登录中...
请勿关闭此页面
先别划走!
送你5元优惠券,购买VIP限时立减!
5
元
优惠券
优惠券还有
10:00
过期
马上使用
×