Python 2.7
IDE Pycharm 5.0.3
學(xué)校定制版文獻生成器1.0---最討厭參考文獻的排版!
起因
這個小工具早就寫好了,忘了沒Po上網(wǎng),所以這里補充一下,經(jīng)過兩個版本,這個是1.0版本,還有個beta版本,以后應(yīng)該不會再去維護了,本身的程序很小,改改參數(shù)的熟悉Tkinter的問題而已。
實現(xiàn)方法
Python--Tkinter,Button,Listbox,,Scrollbar,Entry,F(xiàn)rame的使用
實現(xiàn)效果,beta版本
優(yōu)點
1.支持作者大小寫混寫(反正自動糾正為首字母大寫),中文不做改變
2.支持題目大小寫混輸入,可選擇題目改變類型
3.目前支持四種格式,期刊,論文,書籍,會議,以后可根據(jù)情況再加入
4.支持起始頁尾添加'P'或者'頁',其實都是支持字符串輸入的
5.若不選擇格式類型,題目類型,默認為期刊,題目不做改變
6.相比較于知網(wǎng)的生成器和latex的非人操作,簡單易行,文件綠色直接雙擊運行,且包體較小不占空間,無需安裝
這里是1.0版本
改進
1.修復(fù)細微bug,壓縮代碼
2.增加生成后的文獻橫向進度條,方便查看,橫向進度條如何實現(xiàn)請看解決Tkinter中g(shù)rid/pack布局中的listbox,scrollbar組合橫置
3.增加對輸入文獻的多選復(fù)制
附上:1.0版本下載地址
代碼實現(xiàn)
# -*- coding: utf-8 -*-
#Author:哈士奇說喵
#文獻格式生成器1.0
import string
from Tkinter import *
#主框架部分
root = Tk()
root.title('參考文獻生成器1.0(哈爾濱工程大學(xué)專版)--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='規(guī)則運算(根框架)',font=('宋體',15))
#------------------------------------定義規(guī)則------------------------------
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)
#還可以繼續(xù)增加規(guī)則函數(shù),只要是兩輸入的參數(shù)都可以
#------------------------------------觸發(fā)函數(shù)---------------------------------
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():#規(guī)則函數(shù)
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')=='學(xué)位論文[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():#清空函數(shù)
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='啥大學(xué)啥論文--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)
#---------------------------------選擇運算規(guī)則-----------------------------
#還可以添加其他規(guī)則
lb = Listbox(frame_input,exportselection=False,height=3)
list_item=['期刊[J]', '學(xué)位論文[D]', '圖書[M]', '會議[C]']
for i in list_item:#需要用for循環(huán)讀出列表中元素并顯示插入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)
#--------------------------------計算結(jié)果框架---------------------------------
frame_output = Frame(root)
#Label_output=Label(frame_output, text='(計算結(jié)果框架)', 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后圖片無法顯示問題,請選擇對應(yīng)路徑,或者注釋如下語句:
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電腦運行,通用版本,也可以根據(jù)自己學(xué)校文獻特性自行修改代碼,如何打包請見將python打包成exe文件
致歉
因為時間過去比較久遠了,所以以前遇到的問題不在記錄,我相信我應(yīng)該已經(jīng)備注在程序中了,十分抱歉。如有疑問,請留言。
致謝
@小甲魚--零基礎(chǔ)入門學(xué)習(xí)python之Tkinter篇
@MrLevo520--解決Tkinter中g(shù)rid/pack布局中的listbox,scrollbar組合橫置