说明
有一个WEB系统,因为启动之前,需要检测网络环境,然后启动一系列服务,这样才能最终陈宫启动,所以通过Python的GUI快速开发包tkinter来开发一个桌面主程序。
程序源码,Pycharm2019, python3.9
# Kevin 个人学习Python来实现GUI
# 开发日期:2022-9-25
# 版本 V1.0
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tkinter as tk
from tkinter.filedialog import askopenfilename, asksaveasfilename
import socket
import tkinter as tk # 使用Tkinter前需要先导入
from tkinter import * # 文本和链接需要的模块
import webbrowser as wb # 文本和链接需要的模块
def insert_point(): # 在鼠标焦点处插入输入内容
var = e.get()
t.insert('insert', var)
def insert_end(): # 在文本框内容最后接着插入输入内容
var = e.get()
t.insert('end', var)
# 主程序
# 第1步,实例化object,建立窗口window
window = tk.Tk()
# 第2步,给窗口的可视化起名字
window.geometry("680x500+400+150")
window.title('汇麟数字化阅文系统主程序')
# 创建一个图片管理类
photo = tk.PhotoImage(file="HUILINLOGO.png") # file:t图片路径
imgLabel = tk.Label(window, image=photo) # 把图片整合到标签类中
imgLabel.grid(row=0,rowspan=2,column=0,columnspan=2)
# 创建一个标签类, [justify]:对齐方式
textLabel1 = tk.Label(window, text="这是汇麟数字化阅文系统的主程序,用于网络检测,启动服务,"
"打开网站链接。\n依次启动MYSQL,NGNIX,WEB服务。",font=('Arial', 10))
# justify=tk.LEFT) # 左对齐
textLabel1.grid(row=0,rowspan=2,column=2,columnspan=2,padx=60,pady=20)
# 按钮1.2.3并排,和左边对应的集中显示文本
var1 = tk.StringVar() # 将label标签的内容设置为字符类型,用var来接收hit_me函数的传出内容用以显示在标签上
# var = "这是汇麟数字化阅文系统的主程序,用于网络检测,启动服务,打开网站链接。\n我在换个行"
l1 = tk.Label(window, textvariable=var1, bg='green', fg='white', font=('Arial', 10),width=30, height=1)
# 说明: bg为背景,fg为字体颜色,font为字体,width为长,height为高,这里的长和高是字符的长和高,比如height=2,就是标签有2个字符这么高
l1.grid(row=4,column=2,ipadx=130,ipady=10,padx=10,pady=0)
on_hit_ip = False
def check_ip():
global on_hit_ip
huilin_serverip = '192.168.5.254'
res = socket.gethostbyname(socket.gethostname())
# print('本机IP地址为:%s' % res)
if res == huilin_serverip:
var1.set("路由器连接成功,服务器IP地址设置正常!ip=192.168.5.254")
# print('服务器IP地址设置正常!ip=192.168.5.254')
else:
var1.set("服务器IP地址为%s设置不正常!请连接路由器并修改本机ip为192.168.5.254"%res)
# print('服务器IP地址设置不正常!设置ip=192.168.5.254')
btn_check = tk.Button(window, text="网 络 检 测", command=check_ip)
btn_check.grid(row=4,ipadx=20,ipady=10)
# rowspan=2,column=0,columnspan=2)
# ipadx=25,ipady=10)
# padx=0,pady=20)
# btn_check.pack() # 用了PACK,就不能用grid,或者PLACE
# 添加按钮2 和对应的文本
var2 = tk.StringVar() # 将label标签的内容设置为字符类型,用var来接收hit_me函数的传出内容用以显示在标签上
# var = "这是汇麟数字化阅文系统的主程序,用于网络检测,启动服务,打开网站链接。\n我在换个行"
l2 = tk.Label(window, textvariable=var2, bg='green', fg='white', font=('Arial', 10),width=30, height=1)
# 说明: bg为背景,fg为字体颜色,font为字体,width为长,height为高,这里的长和高是字符的长和高,比如height=2,就是标签有2个字符这么高
l2.grid(row=6,column=2,ipadx=130,ipady=10,padx=10,pady=0)
on_hit_sql = False
def hit_sql():
global on_hit_sql
if on_hit_sql == False:
on_hit_sql = True
var2.set('Mysql is starting......')
else:
on_hit_sql = False
var2.set('')
btn_startsql = tk.Button(window,command=hit_sql)
btn_startsql["text"] = "启 动 SQL"
btn_startsql.grid(row=6,ipadx=20,ipady=10)
# rowspan=2,column=0,columnspan=2)
# ipadx=25,ipady=10)
# ,padx=0,pady=40)
# 添加按钮3 ngnix 和对应文本
var3 = tk.StringVar() # 将label标签的内容设置为字符类型,用var来接收hit_me函数的传出内容用以显示在标签上
# var = "这是汇麟数字化阅文系统的主程序,用于网络检测,启动服务,打开网站链接。\n我在换个行"
l3 = tk.Label(window, textvariable=var3, bg='green', fg='white', font=('Arial', 10),width=30, height=1)
# 说明: bg为背景,fg为字体颜色,font为字体,width为长,height为高,这里的长和高是字符的长和高,比如height=2,就是标签有2个字符这么高
l3.grid(row=8,column=2,ipadx=130,ipady=10,padx=10,pady=0)
on_hit_ngnix = False
def hit_ngnix():
global on_hit_ngnix
if on_hit_ngnix == False:
on_hit_ngnix = True
var3.set('Ngnix is starting......')
else:
on_hit_ngnix = False
var3.set('')
btn_startngix = tk.Button(window,command=hit_ngnix)
btn_startngix["text"] = "启 动NGIX"
btn_startngix.grid(row=8,ipadx=20,ipady=10)
# 添加按钮4 web
var4 = tk.StringVar() # 将label标签的内容设置为字符类型,用var来接收hit_me函数的传出内容用以显示在标签上
# var = "这是汇麟数字化阅文系统的主程序,用于网络检测,启动服务,打开网站链接。\n我在换个行"
l4 = tk.Label(window, textvariable=var4, bg='green', fg='white', font=('Arial', 10),width=30, height=1)
# 说明: bg为背景,fg为字体颜色,font为字体,width为长,height为高,这里的长和高是字符的长和高,比如height=2,就是标签有2个字符这么高
l4.grid(row=10,column=2,ipadx=130,ipady=10,padx=10,pady=0)
on_hit_web = False
def hit_web():
global on_hit_web
if on_hit_web == False:
on_hit_web = True
var4.set('Web is starting......')
else:
on_hit_web = False
var4.set('')
btn_startweb = tk.Button(window,command=hit_web)
btn_startweb["text"] = "启 动WEB"
btn_startweb.grid(row=10,ipadx=20,ipady=10)
# ,padx=0,pady=40)
# 登录链接标签
var5 = tk.StringVar() # 将label标签的内容设置为字符类型,用var来接收hit_me函数的传出内容用以显示在标签上
# var = "这是汇麟数字化阅文系统的主程序,用于网络检测,启动服务,打开网站链接。\n我在换个行"
l5 = tk.Label(window, textvariable=var5, bg='green', fg='white', font=('Arial', 10),width=30, height=1)
# 说明: bg为背景,fg为字体颜色,font为字体,width为长,height为高,这里的长和高是字符的长和高,比如height=2,就是标签有2个字符这么高
l5.grid(row=12,column=2,ipadx=130,ipady=10,padx=10,pady=0)
on_hit_login = False
def hit_login():
global on_hit_login
if on_hit_login == False:
on_hit_login = True
var5.set("登录http://localhost:8001/login")
else:
on_hit_login = False
var5.set('')
btn_login = tk.Button(window,command=hit_login)
btn_login["text"] = "启动WEB服务"
btn_login.grid(row=12,ipadx=20,ipady=10)
# 添加按钮5
btn_exit = tk.Button(window,command=window.destroy)
btn_exit["text"] = "退 出"
btn_exit.grid(row=18,ipadx=20,ipady=10)
#########################################
# 文本链接
text = Text(window, font=('Arial', 10),width=70, height=5)
text.grid(row=18,column=2)
text.insert(INSERT, '登录汇麟数字化会议系统 http://localhost:8001/login')
text.tag_add('link', '1.14', '1.46')
text.tag_config('link', foreground='blue', underline=True)
def show_arrow_cursor(event):
text.config(cursor='arrow')
def show_xterm_cursor(event):
text.config(cursor='xterm')
def click(event):
wb.open('http://localhost:8001/login')
# 绑定事件
text.tag_bind('link', '<Enter>', show_arrow_cursor) # <Enter>鼠标进入
text.tag_bind('link', '<Leave>', show_xterm_cursor) # <Enter>鼠标离开
text.tag_bind('link', '<Button-1>', click) # <Enter>鼠标点击
############################################
# 版权说明
textLabel2 = tk.Label(window, text="Copyright@2022 xxx科技有限公司",font=('Arial', 10))
# justify=tk.LEFT) # 左对齐
textLabel2.grid(row=20,rowspan=2,column=2,columnspan=2,padx=60,pady=20)
window.mainloop()