今天在整理文明单位考试题库,需要重复的在打开的学习资料doc文件和考试题页面来回切换,Ctrl+C试题中的部分内容再到doc文档中Ctrl+F查找定位,甚是麻烦,随手写个Python小外挂,走一波~
import pyperclip
import time,os
# 清个屏
os.system('cls')
# 加载资料库
filePath = 'C:\\Users\\lpwm\\Desktop\\文明单位考试题库\\创建文明单位学习资料.txt'
tk = []
# 将学习资料加载到内存的一个列表对象中
for line in open(filePath, mode='r', encoding='utf-8'):
line = line.strip('\n')
if line != '':
tk.append(line)
# 定义单独变量记录当前剪切板内容,用来和新复制的剪切板内容做比对
curClip = ''
while True:
tmpClip = pyperclip.paste()
try:
if curClip != tmpClip:
os.system('cls')
curClip = tmpClip
# 从资料列表中检索复制的题目关键内容
for t in tk:
if t.find(curClip) != -1:
print(t)
time.sleep(0.1)
except KeyboardInterrupt:
break
Python制作GUI又发现个设计工具wxGlade
https://github.com/wxGlade/wxGlade/
Clone到本地后在解压后的文件夹中运行python wxglade.py就可以打开设计界面了.功能不多,但是够用了,主要操作就是在frame里面添加个wxGridSizer类型的Sizer,里面再添加个TextCtrl控件,设置一下TextCtrl控件Layout属性的Alignment勾选上wxEXPAND,可以自动适应父窗口的大小,实现填充尺寸.
设计完成后点击File>Generate Code即可在项目相同位置生成wxglade_out.py文件,下面就使用生成的这个文件中的界面代码整合上面已经实现的核心功能,完整代码如下:
import pyperclip
import time,os
import wx
# 加载资料库
filePath = './创建文明单位学习资料.txt'
tk = []
for line in open(filePath, mode='r', encoding='utf-8'):
line = line.strip('\n')
if line != '':
tk.append(line)
class MyFrame(wx.Frame):
# 保存当前剪切板内容
curClip = ''
# 清空剪切板内容
pyperclip.copy('')
def __init__(self, *args, **kwds):
# begin wxGlade: MyFrame.__init__
kwds["style"] = kwds.get("style", 0) | wx.BORDER_SIMPLE | wx.DEFAULT_FRAME_STYLE | wx.STAY_ON_TOP
wx.Frame.__init__(self, *args, **kwds)
self.SetSize((600, 250))
self.text_ctrl_2 = wx.TextCtrl(self, wx.ID_ANY, u"选择题目中的部分内容(不要包括题目开头的编号)后使用Ctrl+C复制即可快速定位到相关资料", style=wx.TE_MULTILINE | wx.TE_NO_VSCROLL)
self.__set_properties()
self.__do_layout()
# end wxGlade
# 调用剪切板监听函数
self.monitorClip()
def __set_properties(self):
# begin wxGlade: MyFrame.__set_properties
self.SetTitle(u"文明单位考试辅助")
_icon = wx.NullIcon
_icon.CopyFromBitmap(wx.Bitmap("./NormalIcon.ico", wx.BITMAP_TYPE_ANY))
self.SetIcon(_icon)
self.SetBackgroundColour(wx.Colour(183, 233, 197))
self.text_ctrl_2.SetFont(wx.Font(14, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, 0, "微软雅黑"))
# end wxGlade
def __do_layout(self):
# begin wxGlade: MyFrame.__do_layout
sizer_1 = wx.GridSizer(1, 1, 0, 0)
sizer_1.Add(self.text_ctrl_2, 0, wx.ALL | wx.EXPAND, 0)
self.SetSizer(sizer_1)
self.Layout()
# end wxGlade
def monitorClip(self):
# 监听剪切板
tmpClip = pyperclip.paste()
try:
if self.curClip != tmpClip:
self.curClip = tmpClip
# 检索
for t in tk:
if t.find(self.curClip) != -1:
self.text_ctrl_2.SetValue(t)
except KeyboardInterrupt:
self.text_ctrl_2.SetValue('')
# 设置100ms间隔刷新调用
wx.CallLater(100, self.monitorClip)
# end of class MyFrame
class MyApp(wx.App):
def OnInit(self):
self.frame = MyFrame(None, wx.ID_ANY, "")
self.SetTopWindow(self.frame)
self.frame.Show()
return True
# end of class MyApp
if __name__ == "__main__":
app = MyApp(0)
app.MainLoop()
之前是使用外置的txt文件逐行读取存入数组变量的方式,封装单个exe的话,决定将txt文件内容直接写到代码里面,实现方式:
strTk = '''
1.党的十九大把习近平新时代中国特色社会主义思想确立为党必须长期坚持的指导思想并写进党章,实现了党的指导思想的与时俱进。
2.中国共产党人的初心和使命是为中国人民谋幸福,为中华民族谋复兴。
3.近代以来中华民族最伟大的梦想是实现中华民族伟大复兴。
4.中国梦的本质是国家富强、民族振兴、人民幸福。
5.党的十九大精神的灵魂和主线是习近平新时代中国特色社会主义思想。
'''
tk = strTk.splitlines()
使用一对三个单引号的方式在代码中写入多行字符串,然后再用splitlines()方法将字符串对象按行拆分成一个数组.将上面的代码替换掉之前代码中读取txt的过程即可.
现在开始封装,先装一下要用到的pyinstaller工具
pip install pyinstaller
准备一个icon图标和py文件放到相同位置,一条命令就搞定
pyinstaller -F -w -i NormalIcon.ico wxglade_out.py
执行完毕后打开当前位置下新创建的dist文件夹,里面就有生成好的exe文件了.