Python核心编程习题之五——GUI编程

1. 请描述窗口服务器和窗口客户端的角色
窗口系统使软件服务器,GUI应用是客户端,需要在端窗口环境中执行的程序,并且在窗口系统中进行显示。
2. 请描述父控件和子控件的关系
控件可以单独存在,也可以作为容器存在。如果一个控件包含其他控件,就可以将其认为是那些控件的父控件,相应的,如果一个控件被其他控件包含,则认为是那个控件的子控件。
3. 修改tkhello.py脚本,使用你的自定义消息替代"Hello World!"

import tkinter
root = tkinter.Tk()
label = tkinter.Label(root, text = '这是我的第一个程序')
label.pack()
tkinter.mainloop()

程序截图:


tkhello.png

**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()

程序截图:


Python核心编程习题之五——GUI编程_第1张图片
tkhello3.png

**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()
Python核心编程习题之五——GUI编程_第2张图片
practice5.png

**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()
Python核心编程习题之五——GUI编程_第3张图片
practice6.png

**创建一个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()
Python核心编程习题之五——GUI编程_第4张图片
practice7.png

你可能感兴趣的:(Python核心编程习题之五——GUI编程)