基于Python的参考文献生成器1.0

Python 2.7
IDE Pycharm 5.0.3


  学校定制版文献生成器1.0---最讨厌参考文献的排版!

起因

这个小工具早就写好了,忘了没Po上网,所以这里补充一下,经过两个版本,这个是1.0版本,还有个beta版本,以后应该不会再去维护了,本身的程序很小,改改参数的熟悉Tkinter的问题而已。


实现方法

Python--Tkinter,Button,Listbox,,Scrollbar,Entry,Frame的使用


实现效果,beta版本

beta版本

优点

1.支持作者大小写混写(反正自动纠正为首字母大写),中文不做改变
2.支持题目大小写混输入,可选择题目改变类型
3.目前支持四种格式,期刊,论文,书籍,会议,以后可根据情况再加入
4.支持起始页尾添加'P'或者'页',其实都是支持字符串输入的
5.若不选择格式类型,题目类型,默认为期刊,题目不做改变
6.相比较于知网的生成器和latex的非人操作,简单易行,文件绿色直接双击运行,且包体较小不占空间,无需安装


这里是1.0版本

1.0版本
1.0版本

改进

1.修复细微bug,压缩代码
2.增加生成后的文献横向进度条,方便查看,横向进度条如何实现请看解决Tkinter中grid/pack布局中的listbox,scrollbar组合横置
3.增加对输入文献的多选复制

附上:1.0版本下载地址


代码实现

# -*- coding: utf-8 -*-
#Author:哈士奇说喵
#文献格式生成器1.0

import string
from Tkinter import *

#主框架部分
root = Tk()
root.title('参考文献生成器1.0(哈尔滨工程大学专版)--by 哈士奇说喵')
root.iconbitmap('C:\\Users\\MrLevo\\PycharmProjects\\test\\heru.ico')#左上角小图标icon
img = PhotoImage(file='heru.gif')#图标(大)
Label(root, image=img).pack(side=TOP)
root.geometry()
Label_root=Label(root,text='规则运算(根框架)',font=('宋体',15))

#------------------------------------定义规则------------------------------

def Capital2low(info):#首字母大写,常用
    return string.capwords(info)

def All2low(info):#所有字母小写
    return info.lower()

def ALL2cap(info):#所以字母大写
    return info.upper()

def Periodical(author,title,issn,year,vol,issn_num,frompage):
    if vol=='':
        return '%s.%s[J].%s,%s%s%s:%s.'%(author,title,issn,year,vol,issn_num,frompage)
    else:
        return '%s.%s[J].%s,%s,%s(%s):%s.'%(author,title,issn,year,vol,issn_num,frompage)

def Thesis(author,title,save_place,university,year,frompage):
    return '%s.%s[D].%s:%s,%s:%s.'%(author,title,save_place,university,year,frompage)


def Book(author,title,save_place,issn,year,frompage):
    return '%s.%s[M].%s:%s,%s:%s.'%(author,title,save_place,issn,year,frompage)

def Meeting(author,title,issn,save_place,year,frompage):
    return '%s.%s[C].%s,%s,%s:%s.'%(author,title,issn,save_place,year,frompage)
#还可以继续增加规则函数,只要是两输入的参数都可以
#------------------------------------触发函数---------------------------------

def Title(a):
    try:
        if spec_title.get(spec_title.curselection()).encode('utf-8') == '题目首字母大写':
            re_title = Capital2low(a)
            return re_title
        if spec_title.get(spec_title.curselection()).encode('utf-8') == '题目全部小写':
            re_title = All2low(a)
            return re_title
        if spec_title.get(spec_title.curselection()).encode('utf-8') == '题目全部大写':
            re_title = ALL2cap(a)
            return re_title
        if spec_title.get(spec_title.curselection()).encode('utf-8') == '题目不做改变':

            return a

    except:
        return a

def Answ():#规则函数
    try:
        if lb.get(lb.curselection()).encode('utf-8') == '期刊[J]':
            Ans.insert(END,'[]'+Periodical(Capital2low(input_author.get()),Title(var_title.get()),var_issn.get(),var_year.get(),var_vol.get(),var_issn_num.get(),var_frompage.get()))#注意编码问题
        if lb.get(lb.curselection()).encode('utf-8')=='学位论文[D]':
            Ans.insert(END,'[]'+Thesis(Capital2low(input_author.get()),Title(var_title.get()),var_save_place.get(),var_university.get(),var_year.get(),var_frompage.get()))
        if lb.get(lb.curselection()).encode('utf-8')=='图书[M]':
            Ans.insert(END,'[]'+Book(Capital2low(input_author.get()),Title(var_title.get()),var_save_place.get(),var_issn.get(),var_year.get(),var_frompage.get()))
        if lb.get(lb.curselection()).encode('utf-8')=='会议[C]':
            Ans.insert(END,'[]'+Meeting(Capital2low(input_author.get()),Title(var_title.get()),var_issn.get(),var_save_place.get(),var_year.get(),var_frompage.get()))
    except:

        Ans.insert(END,'[]'+Periodical(Capital2low(input_author.get()),Title(var_title.get()),var_issn.get(),var_year.get(),var_vol.get(),var_issn_num.get(),var_frompage.get()))


def Clea():#清空函数
    input_title.delete(0,END)#这里entry的delect用0
    input_author.delete(0,END)
    input_save_palce.delete(0,END)
    input_university.delete(0,END)
    input_vol.delete(0,END)
    input_issn.delete(0,END)
    input_year.delete(0,END)
    input_issn_num.delete(0,END)
    input_frompage.delete(0,END)
    Ans.delete(0,END)#text中的用0.0


#----------------------------------输入选择框架------------------------------
frame_input = Frame(root)#分成两个框架了,好管理
#Label_input=Label(frame_input, text='(输入和选择框架)', font=('',15))
Label_author=Label(frame_input, text='作者(中间以英文逗号+空格隔开)(自动首字母大写)', font=('',10))
Label_title=Label(frame_input, text='题目(支持大小写混输入)', font=('',10))
Label_save_place=Label(frame_input, text='所在地--x', font=('',10))
Label_university=Label(frame_input, text='啥大学啥论文--x', font=('',10))
Label_issn=Label(frame_input, text='啥期刊/啥出版社/啥会议--x', font=('',10))
Label_year=Label(frame_input, text='年份--x', font=('Times New Roman',10))
Label_vol=Label(frame_input, text='第几卷--x', font=('Times New Roman',10))
Label_issn_num=Label(frame_input, text='(第几期)--x', font=('Times New Roman',10))
Label_frompage=Label(frame_input, text='起始页--x或xx-xx', font=('Times New Roman',10))

var_author = StringVar()
var_title = StringVar()
var_vol = StringVar()
var_issn = StringVar()
var_year = StringVar()
var_issn_num = StringVar()
var_frompage = StringVar()
var_save_place = StringVar()
var_university = StringVar()
input_author = Entry(frame_input, textvariable=var_author,width=40)
input_title = Entry(frame_input, textvariable=var_title,width=80)
input_save_palce = Entry(frame_input, textvariable=var_save_place,width=20)
input_university = Entry(frame_input, textvariable=var_university,width=40)
input_vol = Entry(frame_input, textvariable=var_vol,width=10)
input_issn = Entry(frame_input, textvariable=var_issn,width=50)
input_year = Entry(frame_input, textvariable=var_year,width=10)
input_issn_num = Entry(frame_input, textvariable=var_issn_num,width=10)
input_frompage = Entry(frame_input, textvariable=var_frompage,width=10)




#---------------------------------选择运算规则-----------------------------
#还可以添加其他规则

lb = Listbox(frame_input,exportselection=False,height=3)
list_item=['期刊[J]', '学位论文[D]', '图书[M]', '会议[C]']
for i in list_item:#需要用for循环读出列表中元素并显示插入insert
    lb.insert(END,i)#END是指队列插入

spec_title = Listbox(frame_input,exportselection=False,height=3)#title的选择
list_item=['题目不做改变','题目首字母大写', '题目全部小写', '题目全部大写']
for i in list_item:
    spec_title.insert(END,i)

#--------------------------------计算结果框架---------------------------------
frame_output = Frame(root)
#Label_output=Label(frame_output, text='(计算结果框架)', font=('',15))
Ans = Listbox(frame_output,selectmode=MULTIPLE, height=6,width=80)#text也可以,Listbox好处在于换行
#Ans = Listbox(frame_output,selectmode=EXTENDED, height=6,width=80)#text也可以,Listbox好处在于换行

#---------------------------------Button---------------------------------

calc = Button(frame_output,text='生成文献', command=Answ)
cle = Button(frame_output,text='清空', command=Clea)


#-----------------------------滑动Scrollbar----------------------------------------
#注意和listbox的搭配使用
scr1 = Scrollbar(frame_input)#文献类型
lb.configure(yscrollcommand = scr1.set)
scr1['command']=lb.yview

scr2 = Scrollbar(frame_output)
Ans.configure(yscrollcommand = scr2.set)
scr2['command']=Ans.yview

scr3 = Scrollbar(frame_input)#title改造
spec_title.configure(yscrollcommand = scr3.set)
scr3['command']=spec_title.yview

scr4 = Scrollbar(frame_output,orient='horizontal')#ans x
Ans.configure(xscrollcommand = scr4.set)
scr4['command']=Ans.xview

#--------------------------------布局------------------------------------
#布局写在一块容易排版,可能我low了吧
#Label_root.pack(side=TOP)
frame_input.pack(side=TOP)
#Label_input.pack(side=LEFT)


Label_author.pack()
input_author.pack()
Label_title.pack()
input_title.pack()
Label_save_place.pack()
input_save_palce.pack()
Label_university.pack()
input_university.pack()
Label_issn.pack()
input_issn.pack()
Label_year.pack()
input_year.pack()
Label_vol.pack()
input_vol.pack()
Label_issn_num.pack()
input_issn_num.pack()
Label_frompage.pack()
input_frompage.pack()
scr4.pack()

scr1.pack(side=LEFT,fill=Y)
lb.pack(side=LEFT)
scr3.pack(side=RIGHT,fill=Y)
spec_title.pack(side=RIGHT)


frame_output.pack(side=TOP)
#Label_output.pack(side=LEFT)
calc.pack(side=LEFT)
cle.pack(side=LEFT)
Ans.pack(side=LEFT)
scr2.pack(side=LEFT,fill=Y)

#----------------------------root.mainloop()--------------------------

root.mainloop()

Pay Attention

1.因为制成GUI后图片无法显示问题,请选择对应路径,或者注释如下语句:

root.iconbitmap('C:\\Users\\MrLevo\\PycharmProjects\\test\\heru.ico')
img = PhotoImage(file='heru.gif')
Label(root, image=img).pack(side=TOP)

2.未解决图标打包进入exe其他电脑无法运行脚本问题,尝试修改spec文件,仍然失败,如有解决途径,请不吝赐教


3.如修改完1后,可以正常打包成exe,并且在win8/10 x64电脑运行,通用版本,也可以根据自己学校文献特性自行修改代码,如何打包请见将python打包成exe文件


致歉

因为时间过去比较久远了,所以以前遇到的问题不在记录,我相信我应该已经备注在程序中了,十分抱歉。如有疑问,请留言。


致谢

@小甲鱼--零基础入门学习python之Tkinter篇
@MrLevo520--解决Tkinter中grid/pack布局中的listbox,scrollbar组合横置

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容