python tkinter 布局_python GUI作业:tkinter grid布局

要求

使用tkinter生成如下窗口:

nYbyim.png 图片.png

u6FVni.png 图片.png

jYzQve.png 图片.png

iuAj2q.png 图片.png

参考资料

参考代码

#!/usr/bin/python3

# -*- coding: utf-8 -*-

# 技术支持:https://www.jianshu.com/u/69f40328d4f0

# 技术支持 https://china-testing.github.io/

# https://github.com/china-testing/python-api-tesing/blob/master/practices/tk/tk2.py

# 项目实战讨论QQ群630011153 144081101

# CreateDate: 2018-11-27

import tkinter as tk

from tkinter import ttk

from tkinter import scrolledtext

from tkinter import Menu

# Create instance

win = tk.Tk()

# Add a title

win.title("Python GUI")

tabControl = ttk.Notebook(win) # Create Tab Control

tab1 = ttk.Frame(tabControl) # Create a tab

tabControl.add(tab1, text='Tab 1') # Add the tab

tab2 = ttk.Frame(tabControl) # Add a second tab

tabControl.add(tab2, text='Tab 2') # Make second tab visible

tabControl.pack(expand=1, fill="both") # Pack to make visible

# LabelFrame using tab1 as the parent

mighty = ttk.LabelFrame(tab1, text=' Mighty Python ')

mighty.grid(column=0, row=0, padx=8, pady=4)

# Modify adding a Label using mighty as the parent instead of win

a_label = ttk.Label(mighty, text="Enter a name:")

a_label.grid(column=0, row=0, sticky='W')

# Modified Button Click Function

def click_me():

action.configure(text='Hello ' + name.get() + ' ' +

number_chosen.get())

# Adding a Textbox Entry widget

name = tk.StringVar()

name_entered = ttk.Entry(mighty, width=12, textvariable=name)

name_entered.grid(column=0, row=1, sticky='W') # align left/West

# Adding a Button

action = ttk.Button(mighty, text="Click Me!", command=click_me)

action.grid(column=2, row=1)

# Creating three checkbuttons

ttk.Label(mighty, text="Choose a number:").grid(column=1, row=0)

number = tk.StringVar()

number_chosen = ttk.Combobox(mighty, width=12, textvariable=number, state='readonly')

number_chosen['values'] = (1, 2, 4, 42, 100)

number_chosen.grid(column=1, row=1)

number_chosen.current(0)

chVarDis = tk.IntVar()

check1 = tk.Checkbutton(mighty, text="Disabled", variable=chVarDis, state='disabled')

check1.select()

check1.grid(column=0, row=4, sticky=tk.W)

chVarUn = tk.IntVar()

check2 = tk.Checkbutton(mighty, text="UnChecked", variable=chVarUn)

check2.deselect()

check2.grid(column=1, row=4, sticky=tk.W)

chVarEn = tk.IntVar()

check3 = tk.Checkbutton(mighty, text="Enabled", variable=chVarEn)

check3.deselect()

check3.grid(column=2, row=4, sticky=tk.W)

# GUI Callback function

def checkCallback(*ignoredArgs):

# only enable one checkbutton

if chVarUn.get(): check3.configure(state='disabled')

else: check3.configure(state='normal')

if chVarEn.get(): check2.configure(state='disabled')

else: check2.configure(state='normal')

# trace the state of the two checkbuttons

chVarUn.trace('w', lambda unused0, unused1, unused2 : checkCallback())

chVarEn.trace('w', lambda unused0, unused1, unused2 : checkCallback())

# Using a scrolled Text control

scrol_w = 30

scrol_h = 3

scr = scrolledtext.ScrolledText(mighty, width=scrol_w, height=scrol_h, wrap=tk.WORD)

scr.grid(column=0, row=5, sticky='WE', columnspan=3)

# First, we change our Radiobutton global variables into a list

colors = ["Blue", "Gold", "Red"]

# We have also changed the callback function to be zero-based, using the list

# instead of module-level global variables

# Radiobutton Callback

def radCall():

radSel=radVar.get()

win.configure(background=colors[radSel])

# create three Radiobuttons using one variable

radVar = tk.IntVar()

# Next we are selecting a non-existing index value for radVar

radVar.set(99)

# Now we are creating all three Radiobutton widgets within one loop

for col in range(3):

curRad = tk.Radiobutton(mighty, text=colors[col], variable=radVar,

value=col, command=radCall)

curRad.grid(column=col, row=5, sticky=tk.W) # row=5 ... SURPRISE!

# Create a container to hold labels

buttons_frame = ttk.LabelFrame(mighty, text=' Labels in a Frame ')

buttons_frame.grid(column=0, row=7)

# Place labels into the container element

ttk.Label(buttons_frame, text="Label1").grid(column=0, row=0, sticky=tk.W)

ttk.Label(buttons_frame, text="Label2").grid(column=1, row=0, sticky=tk.W)

ttk.Label(buttons_frame, text="Label3").grid(column=2, row=0, sticky=tk.W)

# Exit GUI cleanly

def _quit():

win.quit()

win.destroy()

exit()

# Creating a Menu Bar

menu_bar = Menu(win)

win.config(menu=menu_bar)

# Add menu items

file_menu = Menu(menu_bar, tearoff=0)

file_menu.add_command(label="New")

file_menu.add_separator()

file_menu.add_command(label="Exit", command=_quit)

menu_bar.add_cascade(label="File", menu=file_menu)

# Add another Menu to the Menu Bar and an item

help_menu = Menu(menu_bar, tearoff=0)

help_menu.add_command(label="About")

menu_bar.add_cascade(label="Help", menu=help_menu)

name_entered.focus() # Place cursor into name Entry

#======================

# Start GUI

#======================

win.mainloop()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值