tkinter -- tcp

     之前给大家发过关于tcp控制访问以及文件传输的代码,这次是利用tkinter来传输,我写的不是特别好,请大家批评指正。

在Linux上面的代码我就不写了。若不知道的博友可以翻看我 python -- TCP "远程控制" 这篇文章。

#coding=utf-8

from tkinter import *
import socket
import time
from tkinter.scrolledtext import ScrolledText
from tkinter.filedialog import askopenfilename

c = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

def clear():
    ip.set("")
    port.set("")
    fileurl1.set("")
    resulttext.delete(0,'end')
def choicefile():
    global path
    path = askopenfilename()
    fileurl1.set(path)
def shangchuan():
    cmd1 = "scwj"
    c.send(bytes(cmd1,encoding="gbk")) #将命令转换后发送
    print(path)
    data = c.recv(1024)
    print(str(data,encoding="utf8"))
    filename = path.split("/")[-1]
    print(filename)
    c.send(bytes(filename,encoding="gbk"))
    with open(path,"rb") as f:
        fdata = f.read()
    c.send(fdata)
    data2 = c.recv(1024)
    print(str(data2,encoding="utf8"))
def lianjie():
    IP = ip.get()
    PORT = port.get()
    addr = (IP,PORT)
    #print(addr)
    c.connect(addr) #连接服务器
def tijiao():
        cmd1 = cmd.get()
        c.send(bytes(cmd1,encoding="gbk")) #将命令转换后发送
       # if cmd == "byebye": #如果发送byby就退出连接
           # break
        ret = c.recv(20480)
        print(str(ret,encoding="utf8")) #收到的信息显示
def main() :
    root = Tk() #设定底板
    global ip
    ip = StringVar()
    global port
    port = IntVar()
    global cmd
    cmd = StringVar()
    root.title("本地文件上传")
    global fileurl1
    fileurl1 = StringVar()
    global resulttext
    frame = Frame(root) #定义屏幕上的一块矩形区域
    frame.pack(padx=8, pady=8, ipadx=5) #矩形区域摆放
    iplabel = Label(frame,text="输入ip:",font="Helvetica -15 bold")
    iplabel.grid(row=0, column=0, padx=5, pady=5, sticky="ne")
    ipentry = Entry(frame,textvariable=ip,width=30)
    ipentry.grid(row=0, column=1, sticky='ws', columnspan=1, padx=5, pady=5)
    portlabel = Label(frame,text="输入端口:",font="Helvetica -15 bold") #文字标签字体
    portlabel.grid(row=0, column=2, padx=5, pady=5, sticky="n") #网格划分其位置在第一行第一列 上下间隔5 靠西边
    portentry = Entry(frame,textvariable=port,width=5) #输入框内容和值 宽度
    portentry.grid(row=0, column=3, sticky='ew', columnspan=1, padx=5, pady=5)
    ok = Button(frame,text="链接", default='active',command=lianjie) #定义按钮按下去就调用函数
    ok.grid(row=0, column=4,padx=8, pady=5)
    quitscan1 = Button(frame,text="本地文件选择", default='active',command=choicefile, width=10,height=1)
    quitscan1.grid(row=1, column=3, padx=8, pady=5)
    quitscan1= Button(frame,text="上传", default='active',command=shangchuan)
    quitscan1.grid(row=1, column=4, padx=8, pady=5)
    iplabe3 = Label(frame,text="本地文件路径:",font="Helvetica -15 bold")
    iplabe3.grid(row=1, column=0, padx=5, pady=5, sticky="ne")
    fileurl = Entry(frame,textvariable=fileurl1,width=30) #输入框内容和值 宽度
    fileurl.grid(row=1, column=1, sticky='ew', columnspan=1, padx=5, pady=5)
    resultlabel = Label(frame,text="命令输入界面:", font='Helvetica -15 bold')
    resultlabel.grid(row=2, column=0, padx=5, pady=5, sticky=W,columnspan=2)
    resulttext=Entry(frame,width=50,font=('Courier New', 13),fg='black',bg='white',textvariable=cmd)
    #生成一个带滚动条的矿体第二行第一列 横跨4列
    resulttext.grid(row=3,column=0,columnspan=5)
    clearscan=Button(frame,text="清空", default='active',command=clear, width=8,height=1)
    clearscan.grid(row=4, column=1,padx=8, pady=5)
    quitscan= Button(frame,text="退出", default='active',command=quit, width=8,height=1)
    quitscan.grid(row=4, column=3, padx=8, pady=5)
    quitscan= Button(frame,text="命令提交", default='active',command=tijiao, width=8,height=1)
    quitscan.grid(row=4, column=2, padx=8, pady=5)
    root.geometry("600x400")
    root.mainloop()
if __name__ == "__main__":
    main()
    c.close()

给打击截一下效果图

我觉得我最大的问题是命令输入界面不完善,大家可以告诉我哟~谢谢

猜你喜欢

转载自blog.csdn.net/thj_1995/article/details/83512582