Python中使用Tkinter 快速布局编写桌面GUI程序

说明

有一个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") # filet图片路径

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设置不正常!请连接路由器并修改本机ip192.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()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值