1. 请描述窗口服务器和窗口客户端的角色
窗口系统使软件服务器,GUI应用是客户端,需要在端窗口环境中执行的程序,并且在窗口系统中进行显示。
2. 请描述父控件和子控件的关系
控件可以单独存在,也可以作为容器存在。如果一个控件包含其他控件,就可以将其认为是那些控件的父控件,相应的,如果一个控件被其他控件包含,则认为是那个控件的子控件。
3. 修改tkhello.py脚本,使用你的自定义消息替代"Hello World!"
import tkinter
root = tkinter.Tk()
label = tkinter.Label(root, text = '这是我的第一个程序')
label.pack()
tkinter.mainloop()
程序截图:
**4. 修改tkhello3.py脚本,除了Quit按钮外,再添加三个按钮,这三个按钮中的任意一个都可以改变文本标签的内容,从而让标签显示为按下的Button(控件)的文本。
import tkinter
def first_btn():
label['text'] = button1['text']
def second_btn():
label['text'] = button2['text']
def third_btn():
label['text'] = button3['text']
root = tkinter.Tk()
label = tkinter.Label(root, text='这是我的第一个程序')
label.pack()
button1 = tkinter.Button(root, text='第一个按钮', command=first_btn, bg='red', fg='white')
button1.pack(fill=tkinter.X, expand=1)
button2 = tkinter.Button(root, text='第二个按钮', command=second_btn, bg='red', fg='white')
button2.pack(fill=tkinter.X, expand=1)
button3 = tkinter.Button(root, text='第三个按钮', command=third_btn, bg='red', fg='white')
button3.pack(fill=tkinter.X, expand=1)
tkinter.mainloop()
程序截图:
**5. 修改联系4的解决方案,使用3个Radiobutton来控制Label文本的显示。
import tkinter
def update():
i = v.get()
if i < 0:
return
label['text'] = radios[i]['text']
root = tkinter.Tk()
label = tkinter.Label(root, text='这是我的第一个程序')
label.pack()
v = tkinter.IntVar()
v.set(-1)
radios = []
for i in range(3):
radio = tkinter.Radiobutton(root, variable=v, value=i, text='选中第'+str(i)+'个')
radio.pack()
radios.append(radio)
quit = tkinter.Button(root, text='退出', command=root.quit, bg='red', fg='white')
quit.pack()
update = tkinter.Button(root, text='更新', command=update, bg='red', fg='white')
update.pack()
tkinter.mainloop()
**6. 修改5的解决方案,将Radiobutton替换为一个Entry文本框,并设置其默认值为“Hello World!”,用户可以使用新的文本字符串编辑Entry文本框,单击update按钮后,在Label中更新文本。
from tkinter import *
def update():
label['text'] = u.get()
root = Tk()
label = Label(root, text='这是我的第一个程序')
label.pack()
u = StringVar()
u.set('Hello World!')
entry = Entry(root, width=20, textvariable=u)
entry.pack()
quit = Button(root, text='退出', command=root.quit, bg='red', fg='white')
quit.pack()
update = Button(root, text='更新', command=update, bg='red', fg='white')
update.pack()
mainloop()
**创建一个GUI应用,其中包括一个让用户提供文本文件名的Entry文本框。打开并读取文件内容,并将其显示在Label标签中。
from tkinter import *
from tkinter import messagebox
from tkinter import filedialog
import os
def list_dir(path = os.curdir):
files = os.listdir(path)
filenames = []
for file in files:
filenames.append(file)
return '\n'.join(filenames)
def openfile():
file = file_path.get()
if not os.path.exists(file):
messagebox.showerror('文件不能打开','你输入的文件地址有误!')
texts.delete(1.0, END)
texts.insert(END,list_dir(os.curdir))
with open(file,'r') as f:
texts.delete(1.0, END)
texts.insert(END, f.read())
def fileopen():
filename = filedialog.askopenfile()
if filename:
file_path.set(filename.name)
root = Tk()
label = Label(root,text='文件显示')
label.pack()
textfm = Frame(root)
textsb = Scrollbar(textfm)
textsb.pack(side=RIGHT, fill=Y)
texts = Text(textfm, height=15, yscrollcommand=textsb.set)
texts.insert(END,'空')
textsb.config(command=texts.yview)
texts.pack(side=LEFT, fill=BOTH)
textfm.pack(fill=X)
filefm = Frame(root)
fopen = Button(filefm, text='...', command=fileopen)
fopen.pack(side=RIGHT)
file_path = StringVar()
entry = Entry(filefm, width=20, textvariable=file_path)
entry.pack(side=LEFT)
filefm.pack()
bfm = Frame(root)
open_file = Button(bfm, text='打开文件', command=openfile)
open_file.pack(side=LEFT)
quit_button = Button(bfm, text='退出程序', command=root.quit)
quit_button.pack(side=LEFT)
bfm.pack()
mainloop()