欢迎光临UUpython
最大、最新、最全的Python代码收集站

[GUI]SVN拉取

这段代码使用了Tkinter库创建了一个简单的图形界面,用于执行SVN操作。主要功能包括:

  1. 更新SVN:执行TortoiseProc.exe命令的更新操作。
  2. 清理SVN:执行TortoiseProc.exe命令的清理操作。
  3. 查看日志:执行TortoiseProc.exe命令的查看日志操作。
  4. 还原SVN:执行TortoiseProc.exe命令的还原操作。
  5. 重新定位:执行TortoiseProc.exe命令的重新定位操作。
  6. 帮助:执行TortoiseProc.exe命令的帮助操作。

代码使用了多线程来处理按钮点击事件,避免界面卡死。界面中的输入框用于输入SVN地址,按钮点击后会执行相应的操作,并在底部的文本框中显示操作结果。

需要注意的是,这段代码需要依赖TortoiseProc.exe,这是TortoiseSVN的可执行文件,它需要在系统中正确配置才能正常运行。代码中使用的是Windows系统的命令行操作。在运行之前,确保TortoiseProc.exe在系统的环境变量中或者与脚本同一目录下。

此外,代码中使用了threading库来创建多线程,确保界面在操作时不会卡死。需要注意多线程可能带来的线程安全问题。

import os
import tkinter as tk
import threading
import time
 
def gengxi1():
    t.delete(1.0, tk.END)
    with open('C:\gjg\svn.txt', 'w') as f:
        f.write(txt.get())
    b = txt.get()
    print(b)
    try:
        c=os.system("TortoiseProc.exe /command:update /path:"+'"'+b+'"'+"/closeonend:1")
    except:
        print('更新失败')
        t.insert('end','更新失败')
    else:
        if c==0:
            print('更新成功')
            t.insert('end', '更新成功')
            a=(time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime()))
            t.insert('end',a)
        else:
            print('更新失败')
            t.insert('end', '更新失败')
def qingli():
    t.delete(1.0, tk.END)
    with open(r'C:\gjg\svn.txt', 'w') as f:
        f.write(txt.get())
    b = txt.get()
    print(b)
    try:
        c = os.system("TortoiseProc.exe /command:cleanup /path:" + '"' + b + '"' + "/closeonend:1")
    except:
        t.insert('end', '清理失败')
    else:
        if c == 0:
            t.insert('end', '清理成功')
        else:
            t.insert('end', '清理失败')
def rizhi():
    t.delete(1.0, tk.END)
    with open(r'C:\gjg\svn.txt', 'w') as f:
        f.write(txt.get())
    b = txt.get()
    os.system("TortoiseProc.exe /command:log /path:" + '"' + b + '"' + "/closeonend:1")
def huanyuan():
    t.delete(1.0, tk.END)
    with open(r'C:\gjg\svn.txt', 'w') as f:
        f.write(txt.get())
    b = txt.get()
    print(b)
    os.system("TortoiseProc.exe /command:revert /path:" + '"' + b + '"' + "/closeonend:1")
    a = (time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime()))
    t.insert('end', a)
def dingwei():
    t.delete(1.0, tk.END)
    with open(r'C:\gjg\svn.txt', 'w') as f:
        f.write(txt.get())
    b = txt.get()
    print(b)
    os.system("TortoiseProc.exe /command:relocate /path:" + '"' + b + '"' + "/closeonend:1")
def bangzhu():
    t.delete(1.0, tk.END)
    with open(r'C:\gjg\svn.txt', 'w') as f:
        f.write(txt.get())
    b = txt.get()
    print(b)
    os.system("TortoiseProc.exe /command:help /path:" + '"' + b + '"' + "/closeonend:1")
 
def thread_it(func, *args):
    '''将函数打包进线程'''
    k = threading.Thread(target=func, args=args)
    k.setDaemon(True)
    k.start()
 
if __name__ == '__main__':
    window=tk.Tk()
    window.title('SVN')
    window.geometry("200x250")
    if not os.path.exists("C:/gjg"):
        os.mkdir("C:/gjg")
    try:
        with open('C:\gjg\svn.txt', "r") as f:
            e1=f.read()
            print(e1)
    except:
        e1='地址,多个地址用*分隔'
    t= tk.Text(window,width = '250', height=11,bg = 'LightBlue')
    t.pack(side = 'bottom')
    btn1 = tk.Button(window, text="更新svn", bg="orange", command=lambda: thread_it(gengxi1))
    btn1.place(x=1, y=40)
    btn2 = tk.Button(window, text="清理svn", bg="orange", command=qingli)
    btn2.place(x=60, y=40)
    btn3 = tk.Button(window, text="查看日志", bg="orange", command=lambda: thread_it(rizhi))
    btn3.place(x=120, y=40)
    btn4 = tk.Button(window, text="还原svn", bg="orange", command=lambda: thread_it(huanyuan))
    btn4.place(x=1, y=70)
    btn5 = tk.Button(window, text="重新定位", bg="orange", command=lambda: thread_it(dingwei))
    btn5.place(x=60, y=70)
    btn6 = tk.Button(window, text="帮助", bg="orange", command=lambda: thread_it(bangzhu))
    btn6.place(x=130, y=70)
    e1 = tk.StringVar(value=e1)
    txt = tk.Entry(window, width=30,textvariable = e1)
    txt.place(x =1,y=10)
 
 
    window.mainloop()
赞(0) 打赏
未经允许不得转载:UUpython » [GUI]SVN拉取
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!