Python中的GUI : wxPython

2024-03-14 15:18
文章标签 python gui wxpython

本文主要是介绍Python中的GUI : wxPython,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • wxPython是Python语言的一套优秀的GUI图形库。
  • Python程序员可以很方便的创建完整的、功能键全的GUI用户界面。
  • wxPython是作为优秀的跨平台GUI库wxWidgets的Python封装和Python模块的方式提供给用户的。

帮同学做一个抽题小软件,功能简单,两个文本框,两个按钮,txt里按行写入题目和答案。正在学python就打算学一下,用python做了。
界面如下图所示。
这里写图片描述

环境:win10 64位 ,python2.7.12 64位
总共三个py文件+一个txt。


代码如下

load_problem.py

#coding:utf-8
#load_problem.py
#author:PlusTangdef load_problem():filepath = './problem.txt'with open(filepath, 'r') as f:problem =[]answer = []txt = f.readlines()i = 1for i in range(len(txt)):if i%2 == 0:problem.append(txt[i].strip())else:answer.append(txt[i].strip())return problem, answer

method.py

#coding:utf-8
#method.py
#author:PlusTangfrom load_problem import load_problem
import randomglobal a
a = 0problem, answer = load_problem()
problem_num = len(problem)
answer_num = len(answer)
# print problem_num
if problem_num != answer_num:print 'load data error!'order = random.sample(range(problem_num), problem_num)
# print orderdef get_problem():global aa = a + 1if a > problem_num:a = 0return problem[order[a-1]]def get_answer():global areturn answer[order[a-1]]

myUI1.py

# coding:UTF-8
#myUI1.py
#author:PlusTangimport wx
from method import get_problem, get_answer,a, problem_numclass MultiTextFrame(wx.Frame):def __init__(self):wx.Frame.__init__(self, None, -1, u"抽题系统",size=(600, 600))panel = wx.Panel(self, -1)# panel.SetBackgroundColour('#4f5049')# font = wx.SystemSettings_GetFont(wx.SYS_SYSTEM_FONT)font = wx.Font(12, wx.ROMAN, wx.NORMAL, wx.BOLD, False)font.SetPointSize(16)vbox = wx.BoxSizer(wx.VERTICAL)vbox.Add((-1, 15))hbox1 = wx.BoxSizer(wx.HORIZONTAL)st1 = wx.StaticText(panel, label=u'题目')st1.SetFont(font)hbox1.Add(st1, flag=wx.RIGHT, border=10)self.tc = wx.TextCtrl(panel, style=wx.TE_MULTILINE | wx.TE_RICH2 | wx.TE_READONLY)self.tc.SetFont(font)hbox1.Add(self.tc, proportion=1, flag=wx.EXPAND)vbox.Add(hbox1, proportion=2, flag=wx.LEFT | wx.RIGHT | wx.EXPAND, border=10)vbox.Add((-1, 15))hbox3 = wx.BoxSizer(wx.HORIZONTAL)st2 = wx.StaticText(panel, label=u'答案')st2.SetFont(font)hbox3.Add(st2,flag=wx.RIGHT, border=10)self.tc2 = wx.TextCtrl(panel, style=wx.TE_MULTILINE | wx.TE_RICH2 | wx.TE_READONLY)self.tc2.SetFont(font)hbox3.Add(self.tc2, proportion=1, flag=wx.EXPAND)vbox.Add(hbox3, proportion=1, flag=wx.LEFT | wx.RIGHT | wx.EXPAND,border=10)vbox.Add((-1, 20))hbox5 = wx.BoxSizer(wx.HORIZONTAL)btn1 = wx.Button(panel, label=u'随机抽题', size=(110, 50))btn1.SetFont(font)hbox5.Add(btn1)btn2 = wx.Button(panel, label=u'显示答案', size=(110, 50))btn2.SetFont(font)hbox5.Add(btn2, flag=wx.LEFT | wx.BOTTOM, border=50)vbox.Add(hbox5, flag=wx.ALIGN_CENTER_HORIZONTAL  | wx.RIGHT, border=10)panel.SetSizer(vbox)self.Bind(wx.EVT_BUTTON, self.getProblem, btn1)self.Bind(wx.EVT_BUTTON, self.getAnswer, btn2)self.b = 0def getProblem(self, event):self.b = self.b+1if self.b > problem_num:self.Close()self.tc.Clear()self.tc2.Clear()self.tc.AppendText(get_problem())def getAnswer(self, event):self.tc2.Clear()self.tc2.AppendText(get_answer())class MyApp(wx.App):def __init__(self):# 重构__init__方法,将错误信息重定位到文件中;# 默认redirect=True,输出到StdOut或StdError;# 为防止程序因错误一闪而过无法捕捉信息,可在# 控制台中使用python -i example.py来运行程序。wx.App.__init__(self, redirect=False, filename=r"./IO.txt")def OnInit(self):frame = MultiTextFrame()frame.Show(True)return Truedef main():app = MyApp()app.MainLoop()if __name__ == "__main__":main()

problem.txt

1.我是题目
1.我是答案
2.我是题目
2.我是答案
3.…………

做UI时的按钮响应一开始遇到了一点问题。在定义的响应函数中无法调用MultiTextFrame类中def init(self)初始化函数里定义的文本框。
后来发现,定义文本框时前面加上self.就行了。
也就是把

#文本框
tc2 = wx.TextCtrl(panel, style=wx.TE_MULTILINE | wx.TE_RICH2 | wx.TE_READONLY)

改为

#文本框
self.tc2 = wx.TextCtrl(panel, style=wx.TE_MULTILINE | wx.TE_RICH2 | wx.TE_READONLY)

对应的响应函数里调用文本框时,前面加上self.就行了:

#响应函数def getAnswer(self, event):self.tc2.Clear()self.tc2.AppendText(get_answer())

AttributeError: ‘module’ object has no attribute ‘Frame’ 解决方法
参考这里
主要就是这三个问题:

  1. 自己根本就没有安装wxpython,或者自己安装不正确,出现问题;自己import下wx测试即可;
  2. 自己命名的文件与python自带的模块文件名重名,这种情况只需将自己的文件改名即可。
  3. 如果以上都没有问题,还是出现一些异常报错,那就说明你可能安装了不止一个版本的wxpython,或者某个版本不准确;

果然,经过排查,是文件名称重名了。我把python文件的名字改了,错误就消失了。


关于wxpython基本控件的学习,可以参考这里,写的比较详细。

这篇关于Python中的GUI : wxPython的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/808820

相关文章

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

Python操作PDF文档的主流库使用指南

《Python操作PDF文档的主流库使用指南》PDF因其跨平台、格式固定的特性成为文档交换的标准,然而,由于其复杂的内部结构,程序化操作PDF一直是个挑战,本文主要为大家整理了Python操作PD... 目录一、 基础操作1.PyPDF2 (及其继任者 pypdf)2.PyMuPDF / fitz3.Fre

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统