Skip to content

Instantly share code, notes, and snippets.

@pala
Created September 11, 2011 06:23
Show Gist options
  • Save pala/1209244 to your computer and use it in GitHub Desktop.
Save pala/1209244 to your computer and use it in GitHub Desktop.
my very 1st python program
#!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