Created
September 11, 2011 06:23
-
-
Save pala/1209244 to your computer and use it in GitHub Desktop.
my very 1st python program
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!C:\\Python25 | |
# -*- coding: GBK -*- | |
from Tkinter import * | |
import os | |
import tkFileDialog | |
import sys | |
import re | |
from tkMessageBox import * | |
import win32clipboard | |
root = Tk() | |
interator = 0 | |
done = [] | |
donebac = [] | |
mark = [] | |
step = [] | |
beensaved = 0 | |
code = '' | |
pastes = '' | |
mainname = '' | |
button_frame = Frame(root,width= 640,height = 50) | |
button_frame.pack(fill = BOTH) | |
class main_frame(Frame): | |
def __init__( self, master = None): | |
Frame.__init__( self ,master) | |
self.master.geometry( '640x685') | |
self.master.title(u'PALALA speeder-x版') | |
self.pack (expand = YES, fill = BOTH) | |
self.myCanvas = Canvas(self, bg = '#f8dc59') | |
self.myCanvas.pack(expand = YES, fill = BOTH) | |
for x in range(40, 640, 40 ): | |
for y in range(40,640,40): | |
self.myCanvas.create_oval (x,y,x,640-y,fill = 'black') | |
self.myCanvas.create_oval(x,y,640-x,y,fill = 'black') | |
#creat 5 masks | |
self.myCanvas.create_oval(155,155,165,165,fill = 'black', tags = | |
'circle') | |
self.myCanvas.create_oval (155,475,165,485,fill = 'black', tags = | |
'circle') | |
self.myCanvas.create_oval(475,155,485,165,fill = 'black', tags = | |
'circle') | |
self.myCanvas.create_oval(475,475,485,485,fill = 'black', tags = | |
'circle') | |
self.myCanvas.create_oval(315,315,325,325,fill = 'black', tags = | |
'circle') | |
for x in range(40,640,40): | |
self.myCanvas.create_text(15, x, text = 16-x/40 ,font = 'Times | |
16') | |
for x in range(40,640,40): | |
charlist = | |
['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O'] | |
self.myCanvas.create_text(x, 625,text =charlist[x/40-1],font = | |
'Times 16') | |
mainframe = main_frame(master = root) | |
def clickevent(event): | |
global interator | |
global done | |
global mark | |
global step | |
global beensaved | |
if 20 < event.x < 620 and 20 < event.y < 620: | |
event.x = event.x + 20 - (event.x + 20) % 40 | |
event.y = event.y + 20 - (event.y + 20) % 40 | |
charlist = | |
['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O'] | |
for item in done: | |
if item == (charlist[event.x / 40 -1], 16 - event.y / 40): | |
return | |
print item | |
done.append((charlist[event.x / 40 -1], 16 - event.y / 40)) | |
if (interator % 2) == 0: | |
mark.append(mainframe.myCanvas.create_oval(event.x-15, | |
event.y-15, event.x+15, event.y+15, fill = 'black', tags = 'circle')) | |
step.append (mainframe.myCanvas.create_text(event.x, event.y, | |
text = interator + 1, fill = 'red', font = 'Simsun 16')) | |
else: | |
mark.append(mainframe.myCanvas.create_oval(event.x-15, | |
event.y-15 , event.x+15 , event.y+15, fill = 'white', tags = 'circle')) | |
step.append(mainframe.myCanvas.create_text(event.x, event.y, | |
text = interator + 1, fill = 'red', font = 'Simsun 16')) | |
interator = interator + 1 | |
print done | |
beensaved = 0 | |
def undo(event): | |
global interator | |
global mark | |
global step | |
global done | |
global beensaved | |
if interator > 0: | |
mainframe.myCanvas.delete (mark[interator - 1]) | |
del mark[interator - 1] | |
mainframe.myCanvas.delete(step[interator - 1]) | |
del step[interator - 1] | |
del done[interator - 1] | |
interator = interator - 1 | |
beensaved = 0 | |
def savefile(): | |
global done | |
global donebac | |
global mainname | |
global beensaved | |
if done == []: | |
info_blank() | |
return | |
if beensaved == 0 and mainname == '': | |
filename = tkFileDialog.asksaveasfilename(filetypes = | |
[('savefile','*.txt')], initialdir = './') | |
else: | |
filename = mainname | |
s = '' | |
for i in range (0,len(done) - 1): | |
s = s +str(done[i][0]) + str(done[i][1]) + '\n' | |
s = s + str(done[len(done) - 1][0]) + str(done[len(done) - 1][1]) | |
if filename: | |
filename = re.sub('.txt','',filename) | |
savefile = open(filename + '.txt', 'w') | |
savefile.write(s) | |
savefile.close() | |
beensaved = 1 | |
mainname = filename | |
donebac = done | |
def saveasfile(): | |
global done | |
global donebac | |
global mainname | |
global beensaved | |
if done == []: | |
info_blank() | |
return | |
filename = tkFileDialog.asksaveasfilename(filetypes = | |
[('savefile','*.txt')], initialdir = './') | |
s = '' | |
for i in range (0,len(done) - 1): | |
s = s +str(done[i][0]) + str(done[i][1]) + '\n' | |
s = s + str(done[len(done) - 1][0]) + str(done[len(done) - 1][1]) | |
if filename: | |
filename = re.sub ('.txt','',filename) | |
savefile = open(filename + '.txt', 'w') | |
savefile.write(s) | |
savefile.close() | |
beensaved = 1 | |
mainname = filename | |
donebac = done | |
def stringTocode(s): | |
global mark | |
global step | |
global done | |
global interator | |
global mainname | |
global beensaved | |
s = s.upper() | |
mistake1 = re.compile('[P-Z]+') | |
if mistake1.search (s): | |
showinfo(u'棋谱错误',u'棋谱里只能有A-O,仔细检查一下先^^') | |
return | |
mistake2 = re.compile('[A-O]+[A-O]+') | |
if mistake2.search(s): | |
showinfo(u'棋谱错误',u'两个字母连在一起了???!!') | |
return | |
mistake3 = re.compile('[A-O]+0') | |
if mistake3.search(s): | |
showinfo(u'棋谱错误',u'字母后面跟0?') | |
return | |
s = re.sub(' ','',s) | |
s = re.sub('[0-9]+[0-9]*[0-9]*[,.]+','',s) | |
s = re.sub('\W','',s) | |
#s = re.sub('[a-z]','[A-Z]', s) | |
search = re.compile('[A-O]+[0-9]+[0-5]*') | |
s = search.findall(s) | |
interator = len(s) | |
charlist = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O'] | |
for i in range (0, len(s)): | |
x = s[i][0] | |
if len(s[i]) == 3: | |
y = int(s[i][1] + s[i][2]) | |
done.append((x , y)) | |
else: | |
y = int(s[i][1]) | |
done.append((x , y)) | |
for j in range(0, len(charlist)): | |
if x == charlist[j]: | |
x = j | |
x = (x + 1) * 40 | |
y = (16 - y) * 40 | |
if i%2 == 0: | |
mark.append(mainframe.myCanvas.create_oval (x-15, y-15, x+15, | |
y+15, fill = 'black', tags = 'circle')) | |
step.append(mainframe.myCanvas.create_text(x, y, text = i + 1, | |
fill = 'red', font = 'Simsun 12')) | |
else: | |
mark.append (mainframe.myCanvas.create_oval(x-15, y-15, x+15, | |
y+15, fill = 'white', tags = 'circle')) | |
step.append(mainframe.myCanvas.create_text(x, y, text = i + 1, | |
fill = 'red', font = 'Simsun 12')) | |
print done | |
def openfile(): | |
global mark | |
global step | |
global done | |
global interator | |
global mainname | |
global beensaved | |
if len(done) != 0 and beensaved == 0 and askyesno(u'提示',u'是否保存当前 | |
棋谱?'): | |
saveasfile() | |
filename = tkFileDialog.askopenfilename(filetypes = ['* {.txt}'], | |
initialdir = './') | |
if filename: | |
beensaved = 1 | |
clean() | |
openedfile = open(filename, 'r') | |
openedfile.seek(0) | |
filecon = openedfile.read() | |
stringTocode(filecon) | |
mainname = filename | |
beensaved = 1 | |
def info(): | |
showinfo(u'关于 palala' ,u'如果有指教,请发送电子邮件至\n\nfs.Jason@ gmail.c | |
om\n\n') | |
def info_blank(): | |
showinfo(u'-,-',u'您还未走一步棋') | |
def copy(): | |
if done == []: | |
info_blank() | |
return | |
s = '' | |
for i in range (0,len(done) - 1): | |
s = s +str(done[i][0]) + str(done[i][1]) + '\n' | |
s = s + str(done[len(done) - 1][0]) + str(done[len(done) - 1][1]) | |
root.clipboard_clear() | |
root.clipboard_append(s) | |
def clean(): | |
global done | |
global beensaved | |
global mark | |
global step | |
global interator | |
if len(done) != 0 and beensaved == 0 and askyesno(u'提示',u'是否保存当前 | |
棋谱?'): | |
saveasfile() | |
for i in range (0, interator): | |
mainframe.myCanvas.delete(mark[i]) | |
mainframe.myCanvas.delete(step[i]) | |
mark = [] | |
step = [] | |
done = [] | |
interator = 0 | |
beensaved = 1 | |
def paste(): | |
global pastes | |
global done | |
global beensaved | |
if len(done) != 0 and beensaved == 0 and askyesno(u'提示',u'是否保存当前 | |
棋谱?'): | |
saveasfile() | |
beensaved = 1 | |
clean() | |
win32clipboard.OpenClipboard (0) | |
i = win32clipboard.IsClipboardFormatAvailable(win32clipboard.CF_TEXT) | |
if i == 0: | |
return | |
pastes = win32clipboard.GetClipboardData() | |
win32clipboard.CloseClipboard() | |
stringTocode(pastes) | |
beensaved = 0 | |
def Help(): | |
showinfo(u'帮助',u'帮助' | |
') | |
#def crazy(): | |
# os.system('C:\\WINDOWS\\system32\\debug.exe < .\tcl\code.txt') | |
open_button = Button(button_frame, text = u'打开', padx=2,pady=2,command = | |
openfile ) | |
open_button.config(font=('Simsun', 10)) | |
open_button.pack(side = LEFT) | |
save_button = Button(button_frame,text = u'保存',padx=2,pady=2, command = | |
savefile ) | |
save_button.config(font=('Simsun', 10)) | |
save_button.pack(side = LEFT) | |
saveas_button = Button(button_frame, text = u'另存',padx=2,pady=2, command | |
= saveasfile) | |
saveas_button.config(font=('Simsun', 10)) | |
saveas_button.pack(side = LEFT) | |
clipboard_button = Button(button_frame, text = u'复制',padx=2,pady=2, | |
command = copy) | |
clipboard_button.config(font=('Simsun', 10)) | |
clipboard_button.pack(side = LEFT) | |
import_button = Button(button_frame, text = u'粘贴',padx=2,pady=2, command | |
= paste) | |
import_button.config(font=('Simsun', 10)) | |
import_button.pack(side = LEFT) | |
cleanscreen_button = Button(button_frame, text = u'清屏',padx=2,pady=2, | |
command = clean) | |
cleanscreen_button.config(font=('Simsun', 10)) | |
cleanscreen_button.pack(side = LEFT) | |
info_button = Button(button_frame, text = u'关于',padx=2,pady=2, command = | |
info) | |
info_button.config(font=('Simsun', 10)) | |
info_button.pack(side = RIGHT) | |
helpinfo = Button(button_frame, text = u'帮助',padx=2,pady=2, command = | |
Help) | |
helpinfo.config(font=('Simsun', 10)) | |
helpinfo.pack(side = RIGHT) | |
mainframe.myCanvas.bind('<Button-1>', clickevent) | |
mainframe.myCanvas.bind('<Button-3>', undo) | |
root.mainloop () |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment