my first software

FS.Jason at gmail.com FS.Jason at gmail.com
Thu Oct 26 08:39:42 EDT 2006


I am a beginner of programming and started to learn Python a week ago.
last 3 days, i write this little tool for Renju.if you have any advice
on my code,please tell me
ps:sorry for my poor english
bow.

#!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'ft,两个字母连在一起了???!!')
        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'For my sweat heart azalea\n\n作者:
Jason  @ 2006.10\n\n语言: Python\n\nVersion: 1.0\n\n对此软件\n\n\
如果您有任何建议\n\n请发送电子邮件至\n\nfs.Jason at gmail.com)

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'1.没啥好名字\n\n2.就叫PALALA\n\n3.功能很简单\n\n4.有错您说话\n\nps:如果下棋累了,就加入车协去骑车吧^^')
#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()




More information about the Python-list mailing list