python图形界面GUI——Tkinter的构造函数问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python图形界面GUI——Tkinter的构造函数问题相关的知识,希望对你有一定的参考价值。

以下是用手册上摘抄的程序。想问问(1)第4行 master=None 是什么作用
(2)第13行app.master.title("Sample application") ,既然master=None,怎么还能调用master的函数呢。。。
请各位大侠不吝赐教,谢谢。

#!/usr/local/bin/python 1
from Tkinter import * 2
class Application(Frame): 3
def __init__(self, master=None):4
Frame.__init__(self, master) 5
self.grid() 6
self.createWidgets()7
def createWidgets(self):8
self.quitButton = Button ( self, text="Quit",9
command=self.quit ) 10
self.quitButton.grid() 11
app = Application() 12
app.master.title("Sample application") 13
app.mainloop()14

参考技术A 嗯,怎么说呢。每一个gui程序都有一个称为顶层(toplevel)的窗口管理器用于管理那些窗口部件,如按钮,输入框之类的,这个窗口管理器就是这些下级部件的master,顶级窗口的master是None即,它自己管理自己。
回到你的问题,(1)第4行的master=None是表示Application这个类的master默认为None,即它是顶层窗口。
(2)第13行中的app.master是返回当前顶层窗口的对象,然后再调用title这个方法设置title,master=None只是表明app是顶层窗口而已。

我自己理解的。

参考资料:http://docs.python.org/library/tkinter.html

本回答被提问者采纳
参考技术B 对于第二个问题。 如果master=None的话, Frame.__init__里边会对master实例化的。

python-图形化界面编程(一个启动停止服务的界面)

GUI编程

1. Python实现GUI的方法

1)使用python的标准库 Tkinter

2)使用wxPython

3)使用Jython(可以和 Java无缝集成)

2. 使用Tkinter

安装tkinter

yum install  -y  tkinter tk-devel

 

创建1个空白的主窗口

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
import Tkinter
 
# 创建一个主窗口
myWindow = Tkinter.Tk()
 
# 进入消息循环
myWindow.mainloop()

 

 

写一个服务启动的图形界面:

[[email protected] python]# cat win2.py
#!/usr/bin/python
#_*_coding:utf-8_*_
import os
from Tkinter import *                        # 导入 Tkinter 库
 
def restart_server():
         ip= listbox1.get(listbox1.curselection())
         server= listbox2.get(listbox2.curselection())
         os.system("sshpass-p ‘redhat‘ ssh [email protected]%s service %s restart" %(ip,server))
         print"sshpass -p ‘redhat‘ ssh [email protected]%s service %s restart" %(ip,server)
         label_info["text"]="服务器(%s)正在重启%s服务..."%(ip,server)
         mywin.update()
 
def start_server():
         ip= listbox1.get(listbox1.curselection())
         server= listbox2.get(listbox2.curselection())
         os.system("sshpass-p ‘redhat‘ ssh [email protected]%s service %s start" %(ip,server))
         print"sshpass -p ‘redhat‘ ssh [email protected]%s service %s start" %(ip,server)
         label_info["text"]="武器器(%s)正在启动%s服务..."%(ip,server)
         mywin.update()
 
def stop_server():
       ip = listbox1.get(listbox1.curselection())
       server = listbox2.get(listbox2.curselection())
       os.system("sshpass -p ‘redhat‘ ssh [email protected]%s service %s stop"%(ip,server))
       print "sshpass -p ‘redhat‘ ssh [email protected]%s service %s stop"%(ip,server)
       label_info["text"]="武器器(%s)正在停止%s服务..."%(ip,server)
       mywin.update()
 
mywin = Tk()                    # 创建窗口对象的背景色
 
mywin.title("server manager")
mywin.geometry("700x400")
 
#创建标签
label1 = Label(mywin,text="服务器列表",font=("Arial",20),bg=‘yellow‘,fg=‘red‘)
label1.grid(row=0,column=0)
label2 = Label(mywin,text="服务名称",font=("Arial",20),bg=‘blue‘,fg=‘red‘)
label2.grid(row=0,column=1)
label3 = Label(mywin,text="操作",font=("Arial",20),bg="blue",fg="red")
label3.grid(row=0,column=2,columnspan=4)
label_info =Label(mywin,text="",font=("Arial",20),bg=‘purple‘,fg=‘red‘)
label_info.grid(row=2,column=0)
 
#创建列表组件
listbox1 =Listbox(mywin,exportselection=False)
listbox2 =Listbox(mywin,exportselection=False)
#exportselection=False,是的选择其他的Listbox时,原来的选择依然有效
 
#创建按钮
button1 = Button(mywin,text="重启服务",command=restart_server)
button2 = Button(mywin,text="启动服务",command=start_server)
button3 = Button(mywin,text="停止服务",command=stop_server)
 
#给列表组件添加数据
ips = []
for ip in range(128,150):                            # 第一个小部件插入数据
         tmp= "192.168.5.%d" %ip
         ips.append(tmp)
for ip in ips:
         listbox1.insert(0,ip)
services =["nginx","mariadb","ftp","network","httpd","mysql"]
for service in services:
         listbox2.insert(0,service)             # 第二个小部件插入数据
 
#给listbox布局
listbox1.grid(row=1,column=0,padx=20,pady=20,ipady=10)
listbox2.grid(row=1,column=1,padx=20,pady=20)
button1.grid(row=1,column=2,padx=10,pady=10)
button2.grid(row=1,column=3,padx=10,pady=10)
button3.grid(row=1,column=4,padx=10,pady=10)
 
mywin.mainloop()                 # 进入消息循环


 

 

执行win2.py的效果图:

[[email protected] python]# python win2.py

技术分享图片

测试直接点击启动、停止、重启服务:

##centos-1主机地址为192.168.5.129,且httpd服务没启动:

[[email protected] ~]# service httpd status

httpd 已停

 

在图形界面点击192.168.5.129àhttpdà启动服务

技术分享图片

centos-1机器上查看httpd的状态:

[[email protected] ~]# service httpd status

httpd (pid 5206) 正在运行...

 

在点击停止服务:

技术分享图片

查看centos-1主机httpd状态:

[[email protected] ~]# service httpd status

httpd 已停

点击重启:

技术分享图片

查看centos-1主机httpd状态:

[[email protected] ~]# service httpd status

httpd (pid 5635) 正在运行...


本文出自 “第一个legehappy51cto博客” 博客,请务必保留此出处http://legehappy.blog.51cto.com/13251607/1983279

以上是关于python图形界面GUI——Tkinter的构造函数问题的主要内容,如果未能解决你的问题,请参考以下文章

python图形界面:首选Tkinter

转:python 实现GUI(图形用户界面)编程

Python编程基础21:GUI编程

python-图形化界面编程(一个启动停止服务的界面)

Python图形用户界面

python怎么用tkinter