QT图形界面开发入门实例
目录
一、前言
为什么我要写这个博客?因为我明明去年暑假花了一天时间开发出了界面,今年暑假就忘了,而且还搜不到靠谱的教程,所以一定要记录下来。而且我今天发现优快云的Markdown编辑器竟然可以用html语言来写blog,正好可以巩固html语法。
入门QT最好的方法是通过一个案例,而不是死板的语法教程,只要一个例子,自己修修补补马上就知道怎么开发一个可以交互的界面了。
二、代码
# -*- coding: utf-8 -*-
import sys
import pandas as pd
from PyQt4 import QtCore, QtGui
#测试用的全局变量
global_num = pd.DataFrame([[1,567],[2,434],[3,891]])
a = pd.DataFrame([[5,100]])
#测试用的全局函数
def plus_num(num):
global a
num = pd.concat([num,a])
return num
# 自定义的窗口类
class TestWindow(QtGui.QWidget):
# 窗口初始化
def __init__(self, parent = None):
super(TestWindow, self).__init__(parent)
self.setWindowTitle(u'胡桃夹子')
# 创建按钮以及对应输入文本框
self.like = QtGui.QPushButton(u'喜欢')
self.likeEdit = QtGui.QLineEdit()
self.hate = QtGui.QPushButton(u'讨厌')
self.hateEdit = QtGui.QLineEdit()
self.change = QtGui.QPushButton(u'更换')
self.changeEdit = QtGui.QLineEdit()
# 创建输入文本框
user = QtGui.QLabel(u'用户ID')
self.userEdit = QtGui.QLineEdit()
number = QtGui.QLabel(u'用餐人数')
self.numberEdit = QtGui.QLineEdit()
price = QtGui.QLabel(u'期望总价')
self.priceEdit = QtGui.QLineEdit()
# 创建显示文本框
self.textEdit = QtGui.QTextEdit()
# 创建垂直布局
# layout = QtGui.QVBoxLayout()
# 创建plot布局
layout = QtGui.QGridLayout()
# 将控件添加到布局中
layout.addWidget(user,0,0)
layout.addWidget(self.userEdit,0,1)
layout.addWidget(number,0,2)
layout.addWidget(self.numberEdit,0,3)
layout.addWidget(price,0,4)
layout.addWidget(self.priceEdit,0,5)
layout.addWidget(self.textEdit,1,0,10,6)#”1,0“表示从第1行第0列开始,“10,6”表示占10行6列
layout.addWidget(self.like,11,0)
layout.addWidget(self.likeEdit,11,1)
layout.addWidget(self.hate,11,2)
layout.addWidget(self.hateEdit,11,3)
layout.addWidget(self.change,11,4)
layout.addWidget(self.changeEdit,11,5)
# 设置窗口布局
self.setLayout(layout)
# 设置按钮单击动作
self.like.clicked.connect(self.pushLike)
self.hate.clicked.connect(self.pushHate)
self.change.clicked.connect(self.pushChange)
# 显示界面
self.show();
# 按钮动作处理
def pushLike(self):
dishid = self.likeEdit.text()
global global_num
output_str = 'Like '+dishid+'\n'+'global_str is '+str(global_num)
global_num = plus_num(global_num)#调用全局函数修改全局变量global_num
self.textEdit.setText(output_str)#在文本框中输出output_str
def pushHate(self):
dishid = self.hateEdit.text()
self.textEdit.setText('Hate '+dishid)
def pushChange(self):
dishid = self.changeEdit.text()
self.textEdit.setText('Change '+dishid)
# 确认是否关闭的对话框
def closeEvent(self, event):
reply = QtGui.QMessageBox.question(self, 'Message',
"Are you sure to quit?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
if reply == QtGui.QMessageBox.Yes:
event.accept()
else:
event.ignore()
# 程序主入口
if __name__=='__main__':
app = QtGui.QApplication(sys.argv)
mainWindow = TestWindow()
mainWindow.show()
sys.exit(app.exec_())
三、解析
本程序在anaconda集成工具中的IDE:spyder上运行。运行界面如下:
在“喜欢”、“讨厌”、“更换”的按钮右侧文本框内输入文本信息并点击相应按钮将在中央文本框中出现对应文字。
四、参考文献
能在短时间内上手Qt,全靠阅读优秀的博文。具体如下:
1、使用 PyQT 作为 Python 的图形界面
2、PyQt4教程
3、pyQt 写的小窗口 获取文本框内容
4、Qt之格栅布局(QGridLayout)