Python tkinter(3) ボタン コントロール


導入

実際、tkinterには多くの機能があり、それを使用して美しいウィンドウを作成するのにはまったく問題ありません。今回は、ボタン コントロールを見てみましょう。

ボタンを作る

まず、ボタンが必要です。ウィンドウを作成し、その上にボタンを配置します。

import tkinter
root = tkinter.Tk()
button = tkinter.Button(root) #创建一个按钮
button.pack() #把按钮放在窗口上
root.mainloop()

ここに画像の説明を挿入
ショートボタンに何も無いのが残念。

ボタンのプロパティ

文章

ボタンに表示される文字列です。

import tkinter
root = tkinter.Tk()
	button = tkinter.Button(root,text="Hello World") #创建一个按钮,上面写 Hello World
button.pack() #把按钮放在窗口上
root.mainloop()

ここに画像の説明を挿入

ボタンに色を付けることも可能です。英単語で表現することもできますし、HEX形式で色を使用することもできます。色は 2 つあり、1 つはフォントの色で、fgまたは をforeground属性名として使用し、もう 1 つは背景色で、bgまたは をbackground属性名として使用します。

import tkinter
root = tkinter.Tk()
button1 = tkinter.Button(root,text="Hi!",fg="red",bg="blue") #红色字体,蓝色背景,用英语单词代替颜色
button1.pack() #把按钮放在窗口上
button2 = tkinter.Button(root,text="Hi!",fg="#00ff00",bg="#0000ff") #绿色字体,蓝色背景,用HEX格式的颜色
button2.pack()
#其实这么写也可以:
#button2 = tkinter.Button(root,text="Hi!",foreground="#00ff00",background="#0000ff")
#但这样写有点麻烦,你觉得呢?
root.mainloop()

ここに画像の説明を挿入
はは、この配色は本当に地獄です!

フォント

フォントは配列として渡されます。配列の最初の項目はフォントで、2 番目の項目はフォント サイズです。フォントが見つからない場合、tkinter はエラーを報告しませんが、代わりにデフォルトのフォントを使用します。

import tkinter
root = tkinter.Tk()
button = tkinter.Button(root,text="Hi!",font=("Arial",50,"roman")) #字体为Arial,字号为50,正体字,也可以不指定样式,如font=("Arial",50)
#若不需要设置字体大小和字体样式,也可以直接写为:
#button = tkinter.Button(root,font="Arial")
button.pack() #把按钮放在窗口上
root.mainloop()

ここに画像の説明を挿入
いくつかのフォント スタイルがあります。

キーワード スタイル
ローマ人 正体字
イタリック イタリック体
大胆な 大胆な
下線 下線
オーバーストライク バーオフ

長さと幅

import tkinter
root = tkinter.Tk()
button1 = tkinter.Button(root,text="Hi!",width=5) #宽为5
button1.pack() #把按钮放在窗口上
button2 = tkinter.Button(root,text="Hi!",height=5) #长为5
button2.pack() #把按钮放在窗口上
button3 = tkinter.Button(root,text="Hi!",height=5,width=5) #长宽都为5
button3.pack() #把按钮放在窗口上
root.mainloop()

ここに画像の説明を挿入
やあ、ちょっと格好悪いですね。
しかし、最後のボタンは明らかに長さと幅が 5 に設定されているのに、正方形ではないのはなぜでしょうか? これは、tkinter ボタンの長さと幅がピクセルや固定長で計算されていないためです (フォントの長さと幅である必要があります)。

整列する

ボタン上のテキストの行数が多い場合は、中央揃え、左揃え、または右揃えに設定できます。

import tkinter
root = tkinter.Tk()
string = """水调歌头
【宋】 苏轼 
丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。
明月几时有?把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间。
转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟。 
"""
button1 = tkinter.Button(root,text=string,justify=tkinter.LEFT) #靠左
button1.pack() #把按钮放在窗口上
button2 = tkinter.Button(root,text=string,justify=tkinter.RIGHT) #靠右
button2.pack() #把按钮放在窗口上
button3 = tkinter.Button(root,text=string,justify=tkinter.CENTER) #居中
button3.pack() #把按钮放在窗口上
root.mainloop()

ここに画像の説明を挿入

カーソル

カーソルにはさまざまなスタイルがあります。内容が多いのでここでは簡単に紹介し、残りの内容は時間を見つけて特集記事を書きたいと思います。

import tkinter
root = tkinter.Tk()
button = tkinter.Button(root,text="Hi!",cursor="watch") #光标放在按钮上后转圈
button.pack() #把按钮粘到窗口上
root.mainloop()

ここに画像の説明を挿入

デフォルトのマウス スタイルは、xterm などの他のマウス スタイルに加えて、矢印 (arrow) です。

一般的な tkinter コントロールには、通常 (Normal)、無効 (Disabled) の 2 つの一般的に使用される状態と、読み取り専用 (Readonly) やアクティブ (Active) などのあまり使用されない状態がありますが、ここでは省略します。

import tkinter
root = tkinter.Tk()
button1 = tkinter.Button(root,text="Normal",state=tkinter.NORMAL) #正常
button1.pack() #把按钮放在窗口上
button2 = tkinter.Button(root,text="Disabled",state=tkinter.DISABLED) #禁用,无法点击按钮
button2.pack() #把按钮放在窗口上
root.mainloop()

ここに画像の説明を挿入

無効なボタンはデフォルトでグレー表示され、クリックできません。ただし、 無効時のフォントカラーの設定も可能 でdisabledforeground、使い方はfg属性に似ています(ただし、無効時の背景色の設定はできないようです)。好き:

button = tkinter.Button(root,text="Disabled",state=tkinter.DISABLED,disabledforeground="green") #禁用时的字体是绿油油的

ここに画像の説明を挿入

注文

ボタンを押した後、どのような機能が必要ですか? これがボタンの魂です。ここで属性がcommand役に立ちます。

import tkinter
def click():
    print("Hello World!")

root = tkinter.Tk()
button = tkinter.Button(root,text="Click me!",command=click) #点击之后运行先前定义的click函数
button.pack() #把按钮放在窗口上
root.mainloop()

ここに画像の説明を挿入

フレーム

ボーダーにはいくつかの種類があります: flatgrooveraisedridge; 効果を一緒に見てみましょう!solidsunken

import tkinter
root = tkinter.Tk()
relief = ["flat","groove","raised","ridge","solid","sunken"] #不同的样式
for i in relief:
    button = tkinter.Button(root,text=i,relief=i) #每个样式来一个按钮
    button.pack() #把每个样式的按钮放在窗口上

root.mainloop()

ここに画像の説明を挿入

境界線のスタイルを使用すると、境界線の太さを設定することもできます:bdまたはborderwidth

import tkinter
root = tkinter.Tk()
button = tkinter.Button(root,text="Hi!",bd=20) #厚厚的一层边框
button.pack() #把按钮放在窗口上
root.mainloop()

ここに画像の説明を挿入

写真

ボタンに文字だけがあると退屈です。ボタンに画像を配置することもできます。

import tkinter
root = tkinter.Tk()
photo = tkinter.PhotoImage(file="laugh.png") #加载一张图片
button = tkinter.Button(root,image=photo) #设置图片
button.pack() #把按钮贴在窗口上
root.mainloop()

ここに画像の説明を挿入

実際には、次のように書くことができるはずです。
button = tkinter.Button(root,image="laugh.png")
ただし、次のような説明できないエラーが常に発生します。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.8/tkinter/__init__.py", line 2650, in __init__
    Widget.__init__(self, master, 'button', cnf, kw)
  File "/usr/lib/python3.8/tkinter/__init__.py", line 2572, in __init__
    self.tk.call(
_tkinter.TclError: image "laugh.png" doesn't exist

また、PhotoImage を使用して画像を読み込む場合は問題ないので、このように書くことはお勧めしません。
テキストと画像を共存させたい場合は、単純にすることはできませんbutton = tkinter.Button(root,text="Hello",image=picture)。そうしないと、ボタンには画像だけがあり、テキストが含まれていないことがわかります。このとき、compound画像とテキストの位置を制御する別の属性が必要です。

価値 平均
中心 画像の中央にテキストをオーバーレイする
テキストの下に画像を表示
テキストの左側に画像を表示
テキストの右側に画像を表示
テキストの上に画像を表示する
なし 木製テキスト
import tkinter
root = tkinter.Tk()
photo = tkinter.PhotoImage(file="laugh.png") #加载一张图片
compound = [tkinter.CENTER,tkinter.BOTTOM,tkinter.LEFT,tkinter.RIGHT,tkinter.TOP,tkinter.NONE]
for i in range(len(compound)):
    button = tkinter.Button(root,image=photo,text=compound[i],compound=compound[i]) #按钮
    button.grid(row=int(i / 2),column=i % 2) #把按钮贴在窗口上

root.mainloop()

ここに画像の説明を挿入

プロパティを変更する

ボタンを設定した後、そのプロパティを変更できます。色やフォントを変更できます。ボタンの設定機能を使用するだけです。

import tkinter
root = tkinter.Tk()
button = tkinter.Button(root,image=photo,text="Hello!") #按钮
button.pack() #把按钮贴在窗口上
button.configure(text="Hi!",font=("Consolas",50)) #将按钮上的文字改为"Hi!",再将字体设置为Consolas,字体大小50
#configure 和 config 都可以,
#button.config(text="Hi!",font=("Consolas",50)) 效果一样
root.mainloop()

要約する

上記はボタンのほとんどのプロパティです。一緒に確認してみましょう:

属性 意義
文章 ボタンにテキストを表示する
fgまたは前景 フォントの色
バックグラウンドまたは背景 背景色
フォント ボタンのフォント。タプルまたは文字列として渡されます。
正当化する テキストを中央揃え (Center)、左揃え (Left)、または右揃え (Right)
カーソル ボタン上にカーソルを置いたときのスタイル
ボタンの状態 (無効 (Disabled)、通常 (Normal) など)
無効化されたフォアグラウンド 無効時のフォントの色
指図 コマンド。ボタンが押されたときに実行されるコマンドです。
安心 ボーダースタイル
bd またはボーダー幅 境界線の太さ
画像 ボタンに表示される画像については、PhotoImage を事前に読み込むのが最善です。そうしないとエラーが発生する可能性があります。
化合物 写真と文字が混在する場合の相対位置
import tkinter
root = tkinter.Tk()

button = tkinter.Button(root,text="Hello World") #创建一个按钮,上面写 Hello World

button = tkinter.Button(root,text="Hi!",fg="red",bg="blue") #红色字体,蓝色背景,用英语单词代替颜色
button = tkinter.Button(root,text="Hi!",fg="#00ff00",bg="#0000ff") #绿色字体,蓝色背景,用HEX格式的颜色

button = tkinter.Button(root,text="Hi!",font=("Arial",50,"roman")) #字体为Arial,字号为50,正题字
button = tkinter.Button(root,font="Arial") #字体Arial,默认字号,默认字体样式

button = tkinter.Button(root,text="Hi!",width=5) #宽为5
button = tkinter.Button(root,text="Hi!",height=5) #长为5
button = tkinter.Button(root,text="Hi!",height=5,width=5) #长宽都为5

string = """水调歌头
【宋】 苏轼 
丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。
明月几时有?把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间。
转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟。 
"""
button = tkinter.Button(root,text=string,justify=tkinter.LEFT) #靠左
button = tkinter.Button(root,text=string,justify=tkinter.RIGHT) #靠右
button = tkinter.Button(root,text=string,justify=tkinter.CENTER) #居中

button = tkinter.Button(root,text="Hi!",cursor="watch") #光标放在按钮上后转圈

button = tkinter.Button(root,text="Normal",state=tkinter.NORMAL) #正常
button = tkinter.Button(root,text="Disabled",state=tkinter.DISABLED) #禁用,无法点击按钮
button = tkinter.Button(root,text="Disabled",state=tkinter.DISABLED,disabledforeground="green") #禁用时的字体是绿油油的

def click():
    print("Hello World!")
button = tkinter.Button(root,text="Click me!",command=click) #点击之后运行先前定义的click函数

button = tkinter.Button(root,text="Groove",relief="groove") #不同边框样式的按钮
button = tkinter.Button(root,text="Hi!",bd=20) #厚厚的一层边框

photo = tkinter.PhotoImage(file="laugh.png") #加载一张图片
button = tkinter.Button(root,image=photo) #设置图片
button = tkinter.Button(root,image=photo,text="Center",compound=tkinter.CENTER) #图片位置

button.configure(text="Hi!",font=("Consolas",50,"roman"))

button.pack() #按钮放在窗口上
root.mainloop()

読んでいただきありがとうございます。あなたの褒め言葉が私の最大のモチベーションです。

おすすめ

転載: blog.csdn.net/jzwalliser/article/details/128344943