赞
踩
在开始GUI编程之前,需要先了解这几个概念:窗口和控件、事件驱动处理、布局管理器。
tkinter提供各种控件,如按钮、标签和文本框等,在一个GUI应用程序中使用。这些控件有时也被称为部件。目前有19种tkinter的控件。
from tkinter import *
top = Tk()
top.mainloop()
from tkinter import *
top = Tk()
label = Label(top, text = "hello tkinter")
label.pack()
top.mainloop()
from tkinter import *
top = Tk()
label = Label(top, text = "hello tkinter")
button = Button(top ,text="第一个按钮")
label.pack()
button.pack()
top.mainloop()
from tkinter import * top = Tk() check_music = IntVar() check_video = IntVar() label = Label(top, text = "hello tkinter") button = Button(top ,text="第一个按钮") check_m = Checkbutton(top,text="Music", variable = check_music, onvalue =1, offvalue =0) check_v = Checkbutton(top,text="Video", variable = check_video, onvalue =1, offvalue =0) label.pack() button.pack() check_m.pack() check_v.pack() top.mainloop()
from tkinter import * top = Tk() check_music = IntVar() check_video = IntVar() label = Label(top, text = "hello tkinter") button = Button(top ,text="第一个按钮") check_m = Checkbutton(top,text="Music", variable = check_music, onvalue =1, offvalue =0) check_v = Checkbutton(top,text="Video", variable = check_video, onvalue =1, offvalue =0) font = ("黑体", 10, "bold") text = Text(top,height=5, width=30, font=font, bg="white", fg="black") text.insert(INSERT,"Hello GUI,") text.insert(END, "Bye!") label.pack() button.pack() check_m.pack() check_v.pack() text.pack() top.mainloop()
from tkinter import * win = Tk() win.title("Python GUI") def _quit(): win.quit() win.destroy() exit() # 创建菜单栏功能 menuBar = Menu(win) win.config(menu = menuBar) font = ("黑体", 10, "bold") fileMenu = Menu(menuBar, tearoff=0, font=font, bg="white", fg="black") menuBar.add_cascade(label="File", menu=fileMenu) fileMenu.add_command(labe="New File") fileMenu.add_separator() fileMenu.add_command(labe="Exit",command=_quit) helpMenu = Menu(menuBar, tearoff=0, font=font, bg="white", fg="black") menuBar.add_cascade(label="Help", menu=helpMenu) helpMenu.add_command(labe="About") check_music = IntVar() check_video = IntVar() label = Label(win, text = "hello tkinter") button = Button(win ,text="第一个按钮") check_m = Checkbutton(win,text="Music", variable = check_music, onvalue =1, offvalue =0) check_v = Checkbutton(win,text="Video", variable = check_video, onvalue =1, offvalue =0) text = Text(win,height=5, width=30, font=font, bg="white", fg="black") text.insert(INSERT,"Hello GUI,") text.insert(END, "Bye!") label.pack() button.pack() check_m.pack() check_v.pack() text.pack() win .mainloop()
制作TCP通信的Server 和 Client
# -*- coding: utf-8 -*- """ Created on Thu Mar 26 15:34:10 2020 @author: sinlearn """ import tkinter as tk import tkinter.ttk as ttk import socket import threading import time class TCP_Server(): def __init__(self): winserver = tk.Tk() winserver.title("TCP Server") winserver.geometry("500x500") winserver.resizable(width=False, height=False) font = ("宋体", 10) self.rbtn = tk.Radiobutton(winserver, text="未连接", fg="red") self.label_port = tk.Label(winserver, text=" 端口:", font=font) self.label_send = tk.Label(winserver, text=" 发送区:", font=font) self.label_recv = tk.Label(winserver, text=" 接收区:", font=font) self.label_clist = tk.Label(winserver, text=" 客户端列表:", font=font) self.spinbox_port = tk.Spinbox(winserver, from_=1024, to=10000) self.btn_start = tk.Button(winserver, text="启动", bg="white", command=self.do_start) self.btn_stop = tk.Button(winserver, text="停止", bg="white", command=self.do_stop) self.btn_send = tk.Button(winserver, text="发送", bg="white", command=self.send_to_client) self.en_send = tk.Entry(winserver, text="Test", bd=2) self.text_recv = tk.Text(winserver, height=5, width=43, font=font, bg="white", fg="black") self.client_list = ttk.Treeview(winserver, height=10, show="headings", columns=('col1', 'col2', 'col3')) # show = "headings" 隐藏默认的col0列 self.client_list.column('col1', width=50, anchor='center') self.client_list.column('col2', width=200, anchor='center') self.client_list.column('col3', width=100, anchor='center') self.client_list.heading('col1', text='序号') self.client_list.heading('col2', text='IP地址') self.client_list.heading('col3', text='端口号') self.rbtn.place(x=10, y=10) self.label_port.place(x=100, y=15) self.label_send.place(x=100, y=50) self.label_recv.place(x=100, y=140) self.spinbox_port.place(x=150, y=15) self.btn_start.place(x=400, y=10) self.btn_stop.place(x=440, y=10) self.btn_send.place(x=440, y=70) self.en_send.place(x=120, y=70, width=300, height=60) self.text_recv.place(x=120, y=160) self.label_clist.place(x=100, y=240) self.client_list.place(x=120, y=260) for i in range(10): self.client_list.insert("", i, values=(i, "192.168.2.3" + str(i), "9999")) # 插入数据 self.client_list.bind("<Double-1>", self.onDBClick) winserver.mainloop() def onDBClick(self, event): item = self.client_list.selection()[0] print("you clicked on ", self.client_list.item(item, "values")) def do_start(self): self.rbtn["fg"] = "green" self.rbtn["text"] = "已连接" def do_stop(self): print("正在断开连接....") self.rbtn["fg"] = "red" self.rbtn["text"] = "未连接" def send_to_client(self): if self.rbtn["text"] == "已连接": print("正在发送数据....") else: print("连接未建立,不能发送数据....") def tcp_link(self, sock, addr): print(f" {addr} 正在请求连接........") sock.send("欢迎您连接到服务器........".encode('utf-8')) while True: data = sock.recv(1024) time.sleep(1) if data and data.decode('utf-8') != "exit": print(data.decode('utf-8')) self.text_recv["text"] = data.decode('utf-8') sock.send("服务器正在接收数据,请稍等........".encode('utf-8')) else: break class TCP_Client(): def __init__(self): self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) winclient = tk.Tk() winclient.title("TCP Client") winclient.geometry("600x250") winclient.resizable(width=False, height=False) font = ("宋体", 10) self.rbtn = tk.Radiobutton(winclient, text="未连接", fg="red") self.label_ip = tk.Label(winclient, text=" IP地址:", font=font) self.label_port = tk.Label(winclient, text=" 端口:", font=font) self.label_send = tk.Label(winclient, text=" 发送区:", font=font) self.label_recv = tk.Label(winclient, text=" 接收区:", font=font) self.spinbox_port = tk.Spinbox(winclient, from_=1024, to=10000) self.btn_start = tk.Button(winclient, text="连接", bg="white", command=self.do_connect) self.btn_stop = tk.Button(winclient, text="断开", bg="white", command=self.do_stopconnect) self.btn_send = tk.Button(winclient, text="发送", bg="white", command=self.send_to_server) self.en_ip = tk.Entry(winclient, text="IP地址", bd=2) self.en_send = tk.Entry(winclient, text="Test", bd=2) self.text_recv = tk.Text(winclient, height=5, width=43, font=font, bg="white", fg="black") self.label_ip.place(x=100, y=15) self.label_port.place(x=360, y=15) self.label_send.place(x=100, y=50) self.label_recv.place(x=100, y=150) self.rbtn.place(x=10, y=10) self.btn_start.place(x=480, y=10) self.btn_stop.place(x=520, y=10) self.btn_send.place(x=480, y=70) self.en_ip.place(x=160, y=15, width=200, height=20) self.spinbox_port.place(x=410, y=15, width=50, height=20) self.en_send.place(x=120, y=70, width=300, height=60) self.text_recv.place(x=120, y=170) winclient.mainloop() def do_connect(self): print("正在连接服务器....") self.rbtn["fg"] = "green" self.rbtn["text"] = "已连接" def do_stopconnect(self): self.rbtn["fg"] = "red" self.rbtn["text"] = "未连接" def send_to_server(self): print("正在往服务器发送数据.....") if __name__ == "__main__": TCP_Server() TCP_Client()
只实现了逻辑,我想具体里面的通信,和socket通信差不多,不继续写下去了,真是尴尬。感觉tkinter用起来还是不是很方便。
pyqt5是一套Python绑定Digia QT5应用的框架。它可用于Python 2和3。Qt库是最强大的GUI库之一。pyqt5的类别分为几个模块,包括以下:
如果需要学习该部分的内容可参考:PyQT中文教程:,此处不做过多展开,主要是这个交互式环境,运行这部分代码,实在,呵呵呵。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。