一个考试模拟界面——先记录一下下ui上的东东

先上图,有图有真相

要记录的有以下几点:

(1)如何给控件widget加背景图片

(2)如何改变控件中的字体大小,如何让界面中字体都改变

(3)如何构造除了这么漂亮的布局呀,这一点上还是很骄傲的!嘿嘿。。。

(4)在python2.7编写出的界面上显示中文

Part1:

还是先写如何布局吧。。按照时间顺序来。。

在pyside中,关于layout,已经接触的有:QtGui.QVBoxLayout(竖直向下的),QtGui.QHBoxLayout(横向的),这两天接触到了一个QtGui.QGridLayout(网格状的)。

这个网格状的,个人觉得甚是好用啊,当然这个好用指的是在布局很复杂的时候,如果只是很简单的横向和纵向的布局,用前两个就好啦。。。

这两天还接触到了一个很好用的Qwidget:QtGui.QGroupBox,他是一个控件,却能设置layout,弥补了layout 添加layout时的一些问题(我遇到了显示不出来,还有布局很不好看的问题)

就上图这么一个小小的界面,我就用了6个QtGui.QGroupBox,每个GroupBox其实他会有一个类似于盒子边框的线条。

贴两段代码来解释:

        self.hGBox = QtGui.QGroupBox()    //创建最主要的GroupBox,在这个括号里可以给这个盒子命名,例如图中的:“笔记”
        self.hGLayout = QtGui.QHBoxLayout()  //创建一个布局是横向的布局
        self.mainEdit = QtGui.QTextEdit()    //新建一个TextEdit
        self.mainEdit.setFixedSize(800,600)      //设置它的固定大小
        self.createVGBox()                //这里其实调用的另一个函数,执行也就是创建一个纵向的GroupBox(也就是上图的右边部分)
        self.hGLayout.addWidget(self.mainEdit)      //布局中添加控件
        self.hGLayout.addWidget(self.vGBox)
        self.hGBox.setLayout(self.hGLayout)        //这句很王道啦,一定要有哟,不然这个box空空如也

下面再贴一段代码:(主要来记录一下GridLayout 的用法,虽然好像没有怎么太大发挥其作用)

        self.midBox = QtGui.QGroupBox()
        midLayout = QtGui.QGridLayout()
        self.findScore = QtGui.QPushButton(self.tr(‘查看成绩‘))
        self.showError = QtGui.QPushButton(self.tr(‘显示错题‘))
        self.saveError = QtGui.QPushButton(self.tr(‘保存错题‘))
        self.seeHistory = QtGui.QPushButton(self.tr(‘历史成绩‘))

        self.findScore.setFixedSize(80,30)
        self.showError.setFixedSize(80,30)
        self.saveError.setFixedSize(80,30)
        self.seeHistory.setFixedSize(80,30)
        midLayout.addWidget(self.findScore,0,0,1,1)      //这个布局与其他两者不同之处在于addWidget后面可以跟好多整数啊。。。呵呵
        midLayout.addWidget(self.showError,0,1,1,1)      //不废话了,这五个参数的意义是:控件,起始行,起始列,(第一个都是从0开始滴),占用行数,占用                                      列数,最后一个是对其方式,这个还没有用过。。。
        midLayout.addWidget(self.saveError,0,2,1,1)
        midLayout.addWidget(self.seeHistory,0,3,1,1)
        self.midBox.setLayout(midLayout)

part2:显示中文的问题

百度了一下(我也想google,无奈前段时间知道的代理网址又被封掉了。),网上有很多的方法极其解释,其解释涉及到编码的问题,额。。下次深究

这里只简单的给出解决之道:

#-*- coding: utf-8 -*-   //这个虽然是个注释,但是但是一定要有,不然行不通,这句话好像只能放在前两句

from PySide import QtGui,QtCore
QtCore.QTextCodec.setCodecForTr(QtCore.QTextCodec.codecForName("utf8"))  //这个当然也很重要啦,还有必须放在开头

有了这两句话,下面在写文字的时候要用self.tr函数(深究又是一篇博文了)

例如:

 remainTimeLabel = QtGui.QLabel(self.tr(‘剩 余 时 间‘))

part3:单个改变字体大小及所有文字改变大小

单个:

font = remainTimeLabel.font()    //widget.font(一般控件都会有这个属性滴)
font.setPointSize(20)        
remainTimeLabel.setFont(font)

全部字体统一修改:

if  __name__==‘__main__‘:
    import sys
    app = QtGui.QApplication(sys.argv)
    font = app.font()
    font.setPointSize(20)
    font.setFont(font)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

part4:给控件添加背景图片,这个搞了还蛮久的。。。

方法有两种,一种是widget.setStyleSheet,这个属性会牵一发而动全身,只要父控件设置了这个属性,那么子控件都会被自动的设置了,

例如:上面举例中的hGBox如何设置了,那么小小的mainEdit和vGBox都会是这个属性(包括mainEidt的内部)

方法二:代码多写了几句,但是可以分单元加载背景图片,例如上图中有4张背景图片哟。

拿加载一张图片来说明:

        image = QtGui.QPixmap()
        image.load(‘pink.jpg‘)
        palette = QtGui.QPalette()
        palette.setBrush(self.hGBox.backgroundRole(),QtGui.QBrush(image))
        self.hGBox.setAutoFillBackground(True)                //这句一定要有哟
        self.hGBox.setPalette(palette)
        self.hGBox.setMask(image.mask())            //这句是设置透明为图片的透明,如果图片没有透明的地方,这句也就无所谓啦

ok ,今天先记下这么多,该去看数据结构啦。。。这个软件还木有写完,精髓(mainEdit识别文本中不同于其他的字体,或者是下划线,并且自动将这些特殊的地方删去)还没有开始用呢。。。还有连接网站(这个博客啦)(这个功能不难)。。。还有将其变成一个.exe文件(总不能让使用的人也安装那么多东东,然后去跑代码吧。。)

不说了,玩数据结构去咯。。。

时间: 2025-01-02 09:30:15

一个考试模拟界面——先记录一下下ui上的东东的相关文章

使用Rational Rose 2003对一个考试成绩管理系统进行建模

考试成绩管理系统 如何简单的介绍使用Rational Rose 2003对一个考试成绩管理系统进行建模,以加深大家对使用UML 进行统一建模方法的认识.由于篇幅原因,对于这个系统的UML建模,我们仅给出系统的需求分析和各种建模元素的图例.本文介绍的是一个考试成绩管理系统. 1.1需求分析 考试成绩管理系统是举行成人高考.自学考试等成人高校对每个参与考试的学员成绩进行综合管理的一个系统.本系统的功能性需求如下: (1)学员报名参加相应的科目考试,通过考试成绩管理系统办理考试报名手续,并产生相应的考

一个网页登陆界面写30多个测试Case——测试之道

转自博文:http://www.cnblogs.com/I-am-Betty/p/3566411.html 具体需求: 有一个登陆页面, (假如上面有2个textbox, 一个提交按钮. 请针对这个页面设计30个以上的test case.) 此题的考察目的: 面试者是否熟悉各种测试方法,是否有丰富的Web测试经验, 是否了解Web开发,以及设计Test case的能力 这个题目还是相当有难度的, 一般的人很难把这个题目回答好. 首先,你要了解用户的需求,比如这个登录界面应该是弹出窗口式的,还是直

java web程序 上机考试登陆界面设计实现

今天是java web上机.做一个登陆注册的界面.要求:jsp.mysql数据库,js做一个美观的界面.功能.可以添加 更多啊.我做的界面被老师狠狠的扣了分.问题在于.当用户没有输入任何信息(没有输入用户名和密码)就直接提交的 时候,页面显示500错误,这里改正的方案2点.我是这么想的.1.要么是提交时弹出一个对话框.显示用户名和密码为空!.这里 要注意的是,弹出的对话框不能阻止用户输入信息,弹出后,依然让用户输入.2.要么是提交按钮后依然跳转到本页面.因为一个form表单 只能跳转到一个页面,

如何测试一个网页登陆界面

具体需求: 有一个登陆页面, (假如上面有2个textbox, 一个提交按钮. 请针对这个页面设计30个以上的test case.) 此题的考察目的: 面试者是否熟悉各种测试方法,是否有丰富的Web测试经验, 是否了解Web开发,以及设计Test case的能力 这个题目还是相当有难度的, 一般的人很难把这个题目回答好. 首先,你要了解用户的需求,比如这个登录界面应该是弹出窗口式的,还是直接在网页里面.对用户名的长度,和密码的强度(就是是不是必须多少位,大小写,特殊字符混搭)等.还有比如用户对界

从Cell的视图推出一个新的界面

先写一个方法, 强制增加一个navigation的属性. 这样self就可以调出来navigation了 - (UINavigationController*)naviController { for (UIView* next = [self superview]; next; next = next.superview) { UIResponder* nextResponder = [next nextResponder]; if ([nextResponder isKindOfClass:

DuiVision开发教程(2)-如何写一个简单的界面程序

基于DuiVision界面库开发的界面程序主要包括如下几部分内容: 1.资源定义,包括图片资源.各个窗口界面的xml定义文件 2.事件处理类代码,用于处理界面响应消息 3.其他业务逻辑代码 下面举例说明如何写一个简单的界面程序. 第一步:使用VC向导创建一个有两个tab页面的DuiVision工程 向导生成的解决方案文件如下: 默认有两个工程,分别是DuiVision库和应用程序工程.自动生成的代码目录中bin目录下的内容那个如下,bkimg目录存放窗口背景图片,skins目录存放图片资源,xm

SQL语句技巧:查询存在一个表而不在另一个表中的数据记录

原文:SQL语句技巧:查询存在一个表而不在另一个表中的数据记录 方法一(仅适用单个字段)使用 not in ,容易理解,效率低 select A.ID from A where A.ID not in (select ID from B) 方法二(适用多个字段匹配)使用 left join...on... , "B.ID isnull" 表示左连接之后在B.ID 字段为 null的记录 select A.ID from A left join B on A.ID=B.ID where

去年方百度首页播放器写的一个js代码,先记录一下,不支持火狐了,改天用autio改改

播放器内核使用的是 object 或embed 刚刚测试了下,最新的火狐不支持了,IE 360还能用,改天换成audio来做吧 这里先记录下来 支持下一曲,暂停,开始 使用方法很简单: 该代码很简单,使用js实现,使用方法很简单 1.引入css:<link href="css/StyleSheet.css" rel="stylesheet" type="text/css" />2.引入js:<script src="j

我做的一个考试资料app的控制器和后台

最近做了一个考试资料app的后台管理和部分前台的控制器,是在我们自己的cms基础上开发的,第一次接触我们自己的cms,简单高效,所以上手较快.