Freewind @ Thoughtworks scala java javascript dart 工具 编程实践 月结 math python english [comments admin] [feed]

(2012-02-20) 使用Python实现“信息更新上传工具”(3)

广告: 云梯:翻墙vpn (省10元) 土行孙:科研用户翻墙http proxy (有优惠)

1. 代码中有中文,运行时提示错误:

SyntaxError: Non-ASCII character '\xe7′ in file c:/test/main.py on line 14, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

需要在文件最前面加上一行注释,指明字符集:

— encoding: UTF-8 -

2. 代码中的中文在GUI上显示为乱码

image

这种情况,需要在字符串前面加上一个u:

image

3. 如何设置窗口的大小

我一直在找怎样在初始化一个窗口时,指定width/height,但是找了好久也没找到。最后在群友的帮助下,发现只能使用resize(width, height)这个方法。

image

4.如何让窗口居中

默认窗口的打开位置是在屏幕的左上方(但又不在角上),如何让它默认居中呢?

只找到一个麻烦的方法来实现这个功能:

def center(self):

qr = self.frameGeometry()       
cp = gui.QDesktopWidget().availableGeometry().center()       
qr.moveCenter(cp)       
self.move(qr.topLeft())       

不知道有没有更好的办法,见stackoverflow上的提问

5. 如何添加菜单

显示在菜单栏上的菜单叫Menu,下拉出来的叫Action。

先看这个效果:

image

对应的代码如下:

def createMenus(self):

self.loginMenu = self.menuBar().addMenu(u"登录")      
self.loginMenu.addAction(gui.QAction(u"登录", self, statusTip=u"登录到数组网(shuzu.org)", triggered=self.login))

self.dataMenu = self.menuBar().addMenu(u"数据")     
self.dataMenu.addAction(gui.QAction(u"下载数据", self, statusTip=u"从服务器下载数据", triggered=self.downloadData))      
self.dataMenu.addAction(gui.QAction(u"上传数据", self, statusTip=u"将新增或修改的数据上传到服务器", triggered=self.uploadData))      
self.dataMenu.addAction(gui.QAction(u"导入数据", self, statusTip=u"将QQ聊天记录导出文件(Mht格式)数据导入进来", triggered=self.importData))      
self.dataMenu.addAction(gui.QAction(u"重置数据", self, statusTip=u"取消所有本地导入或修改", triggered=self.resetData))      

其中triggered对应的是类中定义的其它方法,在菜单被点击时调用。

6. 如何在中间区域增加一个表格

如果仅仅生成一个QTableWidget对象,效果将成杯具:

image

应该这么做。首先生成一个QTableWidget:

def createTable(self):

self.table = gui.QTableWidget(10, 4)      

再把它放到一个layout里,赋给一个没什么用的widget,最后设为central widget:

def layout(self):

mainLayout = gui.QVBoxLayout()      
mainLayout.addWidget(self.table)      
dummy = gui.QWidget()      
dummy.setLayout(mainLayout)      
self.setCentralWidget(dummy)      

现在的效果如下:

image

7. 设置表头

表头是几个数字,把它换成其它文字:

self.table.setHorizontalHeaderLabels([u"日期”, u"时间”, u"用户”, u"内容”])

image

8. 设置表格与外面之间的边距

为了突出效果,设个比较大的:

mainLayout.setContentsMargins(25, 25, 25, 25)

image

实际上设的是:

mainLayout.setContentsMargins(5, 5, 5, 5)

9. 如何设置某列的宽度

默认各列是等宽的,如何让“内容”那一列宽一些呢?

self.table.setColumnWidth(3, 500)

image

10. 如何向表中插入数据

这个与我预想的不同,我以为可以方便的table.insertRow([“aaa”,“bbb”]),可惜要这么做:

row = self.table.rowCount()
self.table.insertRow(row)
self.table.setItem(row, 0, gui.QTableWidgetItem(“aaa”))
self.table.setItem(row, 1, gui.QTableWidgetItem(“bbb”))
self.table.setItem(row, 2, gui.QTableWidgetItem(“ccc”))
self.table.setItem(row, 3, gui.QTableWidgetItem(“ddd”))

先插入一行,再依次给每个单元格里设置数据,有点麻烦

comments powered by Disqus