pyqt学习之列表管理器(网友提供)

# -*- coding: utf-8 -*-

__author__ = ‘Administrator‘

import sys

from PyQt4.QtCore import *

from PyQt4.QtGui import *

MAC = "qt_mac_set_native_menubar" in dir()

class StringListDlg(QDialog):

def __init__(self, name, stringlist=None, parent=None):

super(StringListDlg, self).__init__(parent)

self.name = name

self.listWidget = QListWidget()

if stringlist is not None:

self.listWidget.addItems(stringlist)

self.listWidget.setCurrentRow(0)

buttonLayout = QVBoxLayout()

for text, slot in (("&Add...", self.add),

("&Edit...", self.edit),

("&Remove...", self.remove),

("&Up", self.up),

("&Down", self.down),

("&Sort", self.listWidget.sortItems),

("Close", self.accept)):

button = QPushButton(text)

if not MAC:

button.setFocusPolicy(Qt.NoFocus)

if text == "Close":

buttonLayout.addStretch()

buttonLayout.addWidget(button)

self.connect(button, SIGNAL("clicked()"), slot)

layout = QHBoxLayout()

layout.addWidget(self.listWidget)

layout.addLayout(buttonLayout)

self.setLayout(layout)

self.setWindowTitle("Edit %s List" % self.name)

def add(self):

row = self.listWidget.currentRow()

title = "Add %s" % self.name

string, ok = QInputDialog.getText(self, title, title)

if ok and not string.isEmpty():

self.listWidget.insertItem(row, string)

def edit(self):

row = self.listWidget.currentRow()

item = self.listWidget.item(row)

if item is not None:

title = "Edit %s" % self.name

string, ok = QInputDialog.getText(self, title, title,

QLineEdit.Normal, item.text())

if ok and not string.isEmpty():

item.setText(string)

def remove(self):

row = self.listWidget.currentRow()

item = self.listWidget.item(row)

if item is None:

return

reply = QMessageBox.question(self, "Remove %s" % self.name,

"Remove %s `%s‘?" % (

self.name, unicode(item.text())),

QMessageBox.Yes|QMessageBox.No)

if reply == QMessageBox.Yes:

item = self.listWidget.takeItem(row)

del item

def up(self):

row = self.listWidget.currentRow()

if row >= 1:

item = self.listWidget.takeItem(row)

self.listWidget.insertItem(row - 1, item)

self.listWidget.setCurrentItem(item)

def down(self):

row = self.listWidget.currentRow()

if row < self.listWidget.count() - 1:

item = self.listWidget.takeItem(row)

self.listWidget.insertItem(row + 1, item)

self.listWidget.setCurrentItem(item)

def reject(self):

self.accept()

def accept(self):

self.stringlist = QStringList()

for row in range(self.listWidget.count()):

self.stringlist.append(self.listWidget.item(row).text())

self.emit(SIGNAL("acceptedList(QStringList)"), self.stringlist)

QDialog.accept(self)

if __name__ == "__main__":

fruit = ["Banana", "Apple", "Elderberry", "Clementine", "Fig",

"Guava", "Mango", "Honeydew Melon", "Date", "Watermelon",

"Tangerine", "Ugli Fruit", "Juniperberry", "Kiwi",

"Lemon", "Nectarine", "Plum", "Raspberry", "Strawberry",

"Orange"]

app = QApplication(sys.argv)

form = StringListDlg("Fruit", fruit)

form.exec_()

print "\n".join([unicode(x) for x in form.stringlist])

如图:

时间: 2024-10-10 22:00:18

pyqt学习之列表管理器(网友提供)的相关文章

python深入学习02 上下文管理器

上下文管理器(context manager)主要用于规定某个对象的使用范围.一旦进入或者离开该使用范围,会有特殊操作被调用 (比如为对象分配或者释放内存).它的语法形式是with...as... 关闭文件 上下文管理器有个特别好的优点:可以在不使用文件的时候,自动关闭文件,节省了f.close()的步骤 上下文管理器有隶属于它的程序块.当隶属的程序块执行结束的时候(也就是不再缩进),上下文管理器自动关闭了文件 (我们通过f.closed来查询文件是否关闭).我们相当于使用缩进规定了文件对象f的

Qt学习四 - 布局管理器

开发界面程序,一定会涉及到布局的问题.我们需要让控件显示在理想中的位置,可以直接设置控件的坐标和宽高.但是这样带来一个问题,当用户改变窗口大小时,例如点击最大化按钮或者拖拽窗口边缘,控件是不会改变的(包括控件的坐标和宽高).因为在窗口改变时,你没有告诉程序是否更新控件以及如何更新.如果需要让控件自动更新,那么就要自己来写一些函数来相应这些变化.针对这种情况,Qt提供了一种机制 - 布局,来解决这个问题(大部分用于开发界面程序的语言或者框架,都会提供类似的机制).只需要将控件放入某一种布局,当位置

寒假学习003-布局管理器

昨天学习了一些布局管理器,今天继续了昨天的学习,把五个基本的布局管理器学完了,并且跟则视频的实例敲代码,但是没有运行,由于运行太慢,所以我之在设计界面看了自己的东西,学完布局管理器之后,又紧接着看的是UI组件,在之前的视频中用到了UI组件但是没有细讲,今天和明天的视频就是细讲UI组件. 今天完成的之前JAVA环境的搭建,明天继续看视频学习,冲刺软件还没有基础,所以还没有开始. fighing!!! 原文地址:https://www.cnblogs.com/yizhixiaozhu/p/12257

jmeter压测学习6-HTTP Cookie管理器

前言 web网站的请求大部分都有cookies,jmeter的HTTP Cookie管理器可以很好的管理cookies. 我用的 jmeter5.1 版本,直接加一个HTTP Cookie管理器放到请求的最前面,就可以自动管理cookies了. 看到网上有些教程说要把jmeter.property文件中将 CookieManager.save.cookies 设置为true,我这里 jmeter5.1 版本不用设置也成功了. 场景案例 当登录成功了,服务端会返回2个token 因为这个请求登录成

Android布局管理器-从实例入手学习相对布局管理器的使用

场景 AndroidStudio跑起来第一个App时新手遇到的那些坑: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103797243 使用相对布局RelativeLayout实现简单的登录提示的布局,效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建之后的默认页面布局为 将其修改为Rela

with和上下文管理器

with和上下文管理器 如果你有时间阅读源码的习惯,可能会看到一些优秀的代码会出现带有with关键字的语句. 对于系统资源如文件,数据库连接,socket而言,应用程序打开这些资源并执行完业务逻辑之后,必须要做的事情就是关闭该资源. 在上篇文件中,我们读写文件操作,完毕之后,关闭文件对象.调用close方法,下面来看看如何正确的关闭一个文件. 普通版 def func(): f = open("1.txt", "w") f.write("Python&qu

2.2UI组件(一)布局管理器

所有的布局管理器都是ViewGroup的子类. 2.2.1线性布局LinearLayout android:orientation:可以控制竖排显示(vertical)或者横排显示(horizontal) LInearLayout不会自动换行,一旦屏幕排满之后后面的控件将看不到 基本上很多布局管理器都提供了相应的LayoutParams内部类,该内部类用于控制他们的子元素使他们都具有android:layout_gravity属性,概述性设置子元素在父容器 中的对齐方式 例子 1 <?xml v

tomcat会话之持久化会话管理器

前面提到的标准会话管理器已经提供了基础的会话管理功能,但在持久化方面做得还是不够,或者说在某些情景下无法满足要求,例如把会话以文件或数据库形式存储到存储介质中,这些都是标准会话管理器无法做到的,于是另外一种会话管理器被设计出来--持久化会话管理器. 在分析持久化会话管理器之前不妨先了解另外一个抽象概念会话存储设备Store,引入这个概念是为了更清晰方便地实现各种会话存储方式.作为存储设备最重要的操作无非就是读写操作,读即是将会话从存储设备加载到内存中,而写则将会话写入存储设备中,所以定义了两个重

Android布局管理器-使用LinearLayout实现简单的登录窗口布局

场景 Android布局管理器-从实例入手学习相对布局管理器的使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103838924 线性布局LinearLayout,分为水平和垂直线性布局. 实现效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 将activity修改为LinearLayout