马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
本文我们将学习如何使用Tkinter包编写一些图形用户界面程序。Tkinter是Python的一个标准包,因此我们并不需要安装它。我们将从创建一个窗口开始,然后我们在其之上加入一些小组件,比如按钮,复选框等,并使用它们的一些属性。话不多说,让我们开始吧!
5 p# {2 ]+ e# k/ Q2 h5 }7 I' J0 l: c( I8 u% A( I2 `
创建一个窗口+ H1 d5 ?7 F- K2 w4 j. W) f
首先,我们导入Tkinter包,然后创建一个窗口,最后给这个窗口设置标题。
( b0 m8 V5 j/ ?2 Y [- from tkinter import *
1 E5 X# q0 M' K
9 |- x- f& o5 X4 U H) x- window = Tk()3 }3 ?4 B; W4 J
- window.title("First Window")1 ^7 i9 @4 G5 j5 ^& m
- window.mainloop()
复制代码 结果如下:) h6 |# a4 h- H. ~7 g5 w
# C0 `3 V. `5 ~) N: L& v
8 S* [: r5 ~( [最后一行我们调用了mainloop函数,这个函数将让窗口等待用户与之交互,直到我们关闭它。如果忘记调用mainloop函数的话,将不会向用户显示任何内容(没有窗口)。- x G- p6 V8 ?) `7 ^8 x$ S
: j) r* d9 Y* p& T
添加一个标签组件# y6 R* L3 a0 }! n9 B
为了给之前的例子增加一个标签组件,我们可以使用Label类:) W: ]% h0 X1 q% }& g8 `
- lbl = Label(window, text="Hello")
复制代码 我们可以通过grid函数设置其在窗口的位置:% `: r M* E) I6 ?$ [
- lbl.grid(column=0, row=0)
复制代码 完整代码如下所示:8 q2 y* [6 b1 m3 S
- from tkinter import *, X5 F3 A1 h: q; w
- & k" e7 t% P* }: u
- window = Tk()7 E) R; @+ S& z1 G
- window.title("First Window")0 t- | k+ f9 E# ]) h
- lbl = Label(window, text="Hello")
. J- T" y' j) C - lbl.grid(column=0, row=0). ]6 ]6 |" {! x3 F3 c! L$ f
- window.mainloop()
复制代码 结果如下:+ K! i( v7 F( \
3 c+ ~2 K: _ L" ]- ^
值得注意的是lbl没有调用grid函数的话是不会显示的。
- ~- j0 Y9 S$ r y
' d y7 p: Q' X4 A0 j4 r% X: L3 N设置标签字体大小
1 v3 a4 P1 u$ n$ |我们可以使用font参数设置标签字体大小:6 ]: |6 v& w! I7 b; L
- lbl = Label(window, text="Hello", font=("Arial Bold", 50))
复制代码
* K* S& U! l# _& p
- O5 v" V3 j6 Q+ [3 y) u1 `5 n
font参数不光可以在标签组件中用,其他组件也可以使用呢!/ z- ^/ @0 G9 b9 T7 M
可是,现在窗口貌似太小了,连窗口的标题都看不全,如何设置窗口大小呢?
) _# B d$ h* V- u% V
' p' ?+ ^5 x. b3 |设置窗口大小
! x/ D4 A! A3 n" l2 q, F我们可以用geometry函数来设置窗口大小:
) }7 I3 ?2 }# B7 `+ E- window.geometry("350x200")
复制代码 以上代码将会把窗口设置成350个像素宽,200个像素高。2 p+ p! F2 e4 f( @4 s( K
4 S1 b! K' U# s/ G' C; f添加一个按钮组件
6 h2 a6 t) \! d4 a% {. M: ?, t, V让我们给窗口增加一个按钮组件,它的创建和添加方式和标签组件差不多:9 ]: b" b) W6 H0 Y% N
- btn = Button(window, text="Click Me")
* d+ N+ }9 p7 _" V* B8 @8 H - btn.grid(column=1, row=0)
复制代码 完整代码如下所示:
/ n6 E5 b3 X& ]# V3 F- from tkinter import *</font>
7 J+ O; X: S- f7 p( `( u
+ B4 A# `; r$ M8 [5 ]5 h- window = Tk()
v+ j$ T5 p4 o, Q7 @ - window.title("First Window")
9 U7 P! V* C$ Z+ }9 X1 l6 D5 h - window.geometry("350x200")% a. w8 M# q" S2 x1 w* ]
- lbl = Label(window, text="Hello")
& h+ ]) U& f( C& C5 O - lbl.grid(column=0, row=0)* K- K) ~' a3 H, H2 b
- btn = Button(window, text="Click Me")6 Z# V( q+ r% l, q7 f( @/ Z7 ^
- btn.grid(column=1, row=0)
5 G" }4 {8 ]" Q6 {* o) g; ` - window.mainloop()
复制代码 结果如下:
0 x" r- B! f$ P9 ]% M& U& c
1 t/ t9 H; Y7 V/ U
/ u& A0 X/ v; Y3 h
#### 更改按钮前景和背景颜色! ]4 h q) U6 I4 f2 K/ `) s
我们可以用fg参数设置按钮或其他组件的前景色。; `) Z6 k) a7 r i
我们可以用bg参数设置按钮或其他组件的背景色。5 l- k# F6 V1 a9 Z$ E5 D& i1 X
- btn = Button(window, text="Click Me", bg="orange", fg="red")
复制代码
1 X( y N: e" G- G5 b% S. F2 A' O
% I# P$ j0 r: |/ b/ o8 H& S3 ]现在,如果点击按钮,什么都不会发生,因为我们没有写处理点击事件的代码。$ `$ F# D2 ~) K; o* b$ ^
; \ ?# h; n+ Z. A; I, A2 P% p
处理按钮点击事件
2 W7 l# y& d8 U首先,我们编写一个当按钮点击后需要执行的函数:0 B1 x1 p+ R4 b% U- O, G+ p- c1 O
- def clicked():
( }0 z2 S, U5 m3 [- x - lbl.configure(text="Button was clicked!")
复制代码 然后,我们注明一下点击时要调用的函数:% Z: \( s) ^8 K, r7 e) W5 |) y- ]
- btn = Button(window, text="Click Me", command=clicked)
复制代码 完整代码如下所示:
' @3 x* n3 a9 W; N9 D% K/ d" h/ R- from tkinter import *8 G6 v( C0 N8 V9 s, ^
- - ?8 v) H0 E+ H6 U9 Y: o' b. Z" I% n
- window = Tk()1 P( L' h! `* B# Y+ T% k% ~
- window.title("First Window")+ D: m3 v& B: ]0 Y$ P( Q1 C
- window.geometry("350x200")
y! ~ G9 V7 ~3 y - lbl = Label(window, text="Hello")2 u2 ~: p6 J" X3 A2 z
- lbl.grid(column=0, row=0)+ p1 J F( b$ }7 C
- - A2 |9 Q, a! f3 L t, c2 J* n) x. z
- def clicked():2 t2 E! I+ _- l' V
- lbl.configure(text="Button was clicked!")
: y$ C- T' F4 Y; D1 k
' r d* m# a: o! y1 Y9 k7 Y- btn = Button(window, text="Click Me", command=clicked)
: C& J! [& Y3 H8 m$ O$ {) _, E$ a - btn.grid(column=1, row=0)
" t7 h; F' H: `) n% t2 |8 ^5 [ - window.mainloop()
复制代码 当我们点击按钮后,结果如下:9 H1 [2 _' M9 j
4 e; i7 ^9 h) G7 |8 A, c9 E
' S4 S5 w1 v& g添加一个文本框5 {/ Q. @# y5 M9 r
在之前的例子中我们了解了如何添加一些简单组件,现在我们将通过Tkinter的Entry类获取到用户输入。我们可以这样用Entry类创建一个文本框:' X5 o4 w, K- O8 \
- txt = Entry(window, width=10)
复制代码 然后可以用grid函数像之前那样添加到窗口中。
% \& E* p' ?/ P/ m: \- from tkinter import * U: r2 z5 h2 ]% O7 L
3 t0 `- q& b5 n0 m, S" A# ]- window = Tk()! L! U5 ~' Q2 N+ ^- ~0 d- V2 s5 Y
- window.title("First Window")+ B/ U9 g) R+ k( u- M5 Y- E
- window.geometry("350x200"): J6 b" ?- @" z# _- E+ c
- lbl = Label(window, text="Hello")
8 d5 ^* r, ]. _ - lbl.grid(column=0, row=0)0 [1 ?+ [6 `# v1 Q
- txt = Entry(window, width=10), q% M( F/ T3 }! {
- txt.grid(column=1, row=0)+ O+ A0 W; D2 y% W+ V9 i
- def clicked():
9 ^7 S+ d. `3 N0 b1 u% N - lbl.configure(text="Button was clicked!")
6 S2 f& Z/ w2 f! O; ?) Z - 5 q# O- X( C- P2 G" i
- btn = Button(window, text="Click Me", command=clicked)
1 j1 a, J& L- k% c% D( U - btn.grid(column=2, row=0)2 B! |, j6 z- u8 w; F, i
- window.mainloop()
复制代码 9 `9 W- Y6 q5 w" C
3 q" h' L: A* N. b* w, C
3 X, D; k' m* v1 w* w
此时点击按钮,标签组件内的内容没有变化,如何将文本框中输入的信息在标签组件中显示呢?9 z s$ Y7 |4 S) c: U2 q
我们可以用get函数获取到文本框中输入的信息,然后如下更改clicked函数来设置窗口大小:
7 Q% P9 W- l" Y0 v% P- def clicked():
+ }! z# v4 z7 s" M6 M9 u - res = "Welcome to " + txt.get()
2 N& @8 G3 N* N - lbl.configure(text=res)
复制代码 如果我们在文本框中输入信息并点击按钮组件,标签组件将会显示Welcome to 文本框输入信息 。4 N. i8 Q5 k4 q
以下是完整代码:
" V! B/ H1 \4 g4 |) ?9 g/ Q% z- from tkinter import *: n( L1 V# x! E2 f2 r
- ) k5 k2 r6 Y9 P/ j0 T, Z7 D0 Z7 E
- window = Tk()6 V5 W6 {( V7 W& H* N* d6 p
- window.title("First Window")8 j' a {2 g7 H
- window.geometry("350x200")
) ~6 O# k1 Z/ b, N: M - lbl = Label(window, text="Hello")
+ S# k0 N& P8 A. l6 X% L, h - lbl.grid(column=0, row=0)% q* a0 j( |1 N; k7 b, T
- txt = Entry(window, width=10)' F. w9 z! o7 Z- @
- txt.grid(column=1, row=0): V% B! ?; n- b3 V1 q. r
- def clicked():
7 f1 G" j0 U# z( S - res = "Welcome to " + txt.get()
2 S" G9 _" `2 o+ w - lbl.configure(text=res)
]# Z! E x1 M
- G, a- d! u ^6 P4 r0 U5 }# b- btn = Button(window, text="Click Me", command=clicked)
$ j5 Y* H ?8 z) o7 \% H - btn.grid(column=2, row=0)
0 i. U! }8 M- r - window.mainloop()
复制代码 运行结果为:
8 F' f0 I) A7 B3 @但每次我们运行代码后,我们都需要通过点击文本框来设置输入焦点才能输入信息,有什么办法可以自动设置输入焦点吗?
) y- l5 A8 r+ ^9 k1 j( o3 x: P5 r% a2 S: d _ L" _
设置输入焦点- Y* y6 f% Z) j# B6 T
很简单,我们只需要调用focus函数来设置窗口大小:
) E; ?$ a4 M6 c' P: K1 r l当我们运行代码后,会发现可以直接在文本框中输入信息而不需要点击文本框。
) D% g, L# q$ d/ c; X; M7 K [ i% C% U! u0 U2 p! F9 I
添加一个组合框& P! j* A/ w- Q
为了添加一个组合框,可以使用Combobox类: S6 b) W5 V: X5 e/ i( L
- from tkinter.ttk import *- I7 A4 @: X4 P
- combo = Combobox(window)
复制代码 然后可以给组合框添加一些值。
0 P6 \' [5 _- {- from tkinter import *+ o% n/ L0 F9 ^; j: f
- from tkinter.ttk import *
4 a, k* ]+ i- d6 \/ K - ) ?5 @( D4 \0 R
- window = Tk()4 W4 v7 P" r! F0 ^$ \8 q' I8 q
- window.title("First Window")
+ O2 G* v5 Q$ o - window.geometry("350x200")
( y i- d6 X! ~% k! a8 T: J - combo = Combobox(window)# @9 d5 L0 w0 V, ~3 _
- combo['values'] = (1,2,3,4,5,"Text")2 L; \8 ~3 U: A0 N# `2 q, [
- combo.current(1)
% m4 l5 { ]; Y" }9 l8 V - combo.grid(column=0, row=0)6 \5 {; B( D8 t& }- A
- window.mainloop()
复制代码 我们可以用元组设置组合框选项。, H* ?7 P4 t9 v; ]+ ], M. Q
我们可以通过传递期望被选中选项的索引给current函数用以设置被选中的选项。' m- V- a& @! _: G3 N9 y
我们可以通过get函数获取到被选中的选项。
$ z0 ?; D. W* d% G' y7 b+ l& |3 G; W( U$ D8 s( u1 o; Q- `2 H' k5 B
添加复选框
) J* M; r% w2 _, ^0 Y我们可以用Checkbutton类来创建一个复选框组件:
Q8 K) ~0 _" [+ [6 h- chk = Checkbutton(window, text="Choose")
复制代码 能通过传递值设置复选框的状态:
2 `/ F) ~! ]3 N( e! y- from tkinter import *6 Y6 m! u e; e- o# d5 K
- from tkinter.ttk import *
1 |$ w3 \! X1 X5 m5 g - , e: A3 s1 E* Z8 ^- D
- window = Tk()
. r3 u8 @) @& H; |/ O0 t; m - window.title("First Window") `9 z+ A1 g% X* A8 O% o6 Z
- window.geometry("350x200")
( v" A5 U, x4 u+ N) `8 D - chk_state = BooleanVar()
8 ]+ P" ~7 x5 m9 h2 h7 ?" x7 E - chk_state.set(True) # Set check state
1 B# ?4 I. U8 N) e, q - chk = Checkbutton(window, text="Choose", var=chk_state)
/ W7 O0 ~4 }2 F5 Y- s7 g/ o - chk.grid(column=0, row=0)
1 E+ T% u3 f# h+ [7 k! P6 O - window.mainloop()
复制代码 上例我们用的是BooleanVar变量用来设置复选框的状态,也可以使用IntVar变量进行设置。) y6 R/ K s5 e9 K' J5 z
- chk_state = IntVar()/ h" A: T Z, ~, n
- chk_state.set(1) # Check$ M& V' Q, M9 \2 j3 Y; E
- chk_state.set(0) # Uncheck
复制代码 结果和用BooleanVar一样。* v; r; A# T+ A3 ~
( S: b3 K, O: u9 y+ z# O5 x/ R
添加单选框
- | R; d- y! O F添加单选框可以用Radiobutton类创建一个文本框:
8 `# \0 Z8 y. @- rad1 = Radiobutton(window, text="First", value=1)
复制代码 我们需要给每个单选框设置不同的值,否则会不起作用。) O3 E C$ j4 `; |* L
- from tkinter import *
3 w3 J: {; d5 J, b% N - from tkinter.ttk import *
- n! T; S( o$ t
* a4 A% H* x: m7 U- window = Tk()
7 r$ v7 G( j( A3 }3 E/ n6 ] - window.title("First Window")6 v2 t3 @2 N6 Q% V$ P
- window.geometry("350x200")5 R9 F! X3 H7 S+ `- s
- rad1 = Radiobutton(window, text="First", value=1)- N5 b& p1 E9 d
- rad2 = Radiobutton(window, text="Second", value=2)* ~! F* D! w) L. x/ O4 l
- rad3 = Radiobutton(window, text="Third", value=3)
' `% W! ~- z/ c( c* |* G - rad1.grid(column=0, row=0)6 F: _9 u( A6 ^3 n0 c
- rad2.grid(column=1, row=0)+ `1 Y& Z4 c# i
- rad3.grid(column=2, row=0)" O. O& }, T% s) Y
- window.mainloop()
复制代码 当然,我们可以给这些单选框设置command参数指定一个函数,当用户点击它们时就会运行该函数。% f- I @5 j/ Q
- rad1 = Radiobutton(window, text="First", value=1, command=clicked)
复制代码- def clicked():
) | q' ?% c$ v% { ?5 I) `8 \2 C - # Do what you need
& P9 `2 T; }4 N) z2 C( |6 b( u+ E - pass
复制代码
8 m, j, R. X7 n% Y( v3 n% y' e( w% b获取单选框值0 P, a7 h( z; b! a1 s; {* }
为获取到选中单选框的值,我们可以将IntVar变量传给单选框的variable参数,之后用IntVar变量的get函数就可以获取到其值啦!0 Q8 |4 f. B* E9 M2 x& Z% i
- from tkinter import * I& h( z5 Q' i6 h. {2 \
- from tkinter.ttk import *$ A7 C/ r2 @2 V4 o: s
- . y# ^0 \, F' G; K9 N8 k. O
- window = Tk()
; Z, W+ ~+ S: n! Y% A$ Y! t - window.title("First Window")0 f" Q1 O- \& Y
- selected = IntVar()
) H8 X/ ]& t& K0 O - lbl = Label(window, text="Show Value")1 l; c8 R* F! s( f* g
- rad1 = Radiobutton(window, text="First", value=1, variable=selected)
% A: T) I0 ^: T( y - rad2 = Radiobutton(window, text="Second", value=2, variable=selected)
0 c. I; z d9 a$ e2 ] - rad3 = Radiobutton(window, text="Third", value=3, variable=selected)! z$ t& {! f/ b1 U: P, v. s
- def clicked():
$ }( l) w4 E! K; ^) q5 M - lbl.configure(text=selected.get())
+ j; e. [: X2 o4 S4 d; H2 r- I: O - btn = Button(window, text="Click Me", command=clicked)
, @2 ]* H/ L' ?% z! N/ A( a& t - rad1.grid(column=0, row=0)
" A& [1 A C' l' U - rad2.grid(column=1, row=0)
' E) s7 z% c8 x, _4 M, J+ r8 r6 U; O - rad3.grid(column=2, row=0)
% R# ^/ z% f" s- ^8 d1 [ - btn.grid(column=4, row=0)4 s' z9 a, k. V, d# ?' h O8 A
- lbl.grid(column=0, row=1)
2 F, |* I4 B" c7 H6 u - window.mainloop()
复制代码 每次我们选中一个单选框,并点击按钮,标签框中就会显示其值:( K" O, z! Q1 Y% u% t
: B( H% j! R# D$ A2 |1 ^
# i: I2 {" d' w/ l0 d5 S- {
添加文本区
& r: |; V1 p3 d) K6 ?添加文本区可以用ScrolledText类创建一个文本框:
! i: L3 E/ U. \) K, j- \& u- from tkinter import scrolledtext
+ W: t4 U- l6 ?4 q D - txt = scrolledtext.ScrolledText(window, width=40, height=10)
复制代码 我们需要指定一个文本区的宽度和高度,否则它会占住整个窗口:( [- N( I' l J0 [, ~5 s( g% B
用以下方法可以在文本区中插入文本:
9 `& L, l/ B2 b2 H! G8 A( Q- txt.insert(INSERT, "Text goes here")
复制代码 用以下方法可以将文本区中的文本删除:; g9 C: L) A: L. ~0 b' T/ q
4 h. x4 D' u% W5 b, D
创建消息框$ w) S* q( S' B0 q/ y
我们可以按如下方式创建一个消息框:5 z. P* K/ ^# P/ o' K: z
- from tkinter import messagebox
7 |, P* T! x; j; X - messagebox.showinfo("Message title", "Message content")
复制代码 我们创建一个按钮,当它被点击时显示一个消息框:
|% i$ o+ a$ _- from tkinter import *1 j' H, Z# X+ L* b
- from tkinter import messagebox* ~/ N# `7 K3 j/ Y' D
- : }- F! Q% x8 p( V5 O9 u+ i+ w
- window = Tk()
9 F; Z# C k9 n5 L - window.title("First Window")# \- l4 Y' |; o& F
- window.geometry("350x200")
9 }' D5 |4 I3 a4 Y3 u2 E9 ~$ C - def clicked():- O, i, h$ o4 J5 Z; d) m8 [9 L
- messagebox.showinfo("Message title", "Message content")
, Q u' N0 |2 ~+ P/ f - btn = Button(window, text="Click here", command=clicked)
; @% ]$ X) }: D; t6 o - btn.grid(column=0, row=0)9 E' u6 a, E( f* [0 x! o$ w" k$ ~
- window.mainloop()
复制代码
4 c* z: @$ J$ X. u添加Spinbox
, Y5 v7 z# j; l7 bSpinbox是输入控件;与Entry类似,但是可以指定输入范围值。
# r# @5 @; r. p# U4 t- spin = Spinbox(window, from_=0, to=100)
复制代码 通过from_和to参数指定范围,也可以用width参数指定控件宽度。
% P3 b, [" e' z! W1 D# L2 f- from tkinter import *( R1 C. H w8 Y; K* h4 S7 S; Y
4 {; i' d! B, y0 @8 ^* B$ u- window = Tk()
( a$ d: W, C$ q6 S. ?+ k" ] - window.title("First Window")& F# L' ]+ x1 B j
- window.geometry("350x200")( N3 W$ d" l& o4 J9 S; J
- spin = Spinbox(window, from_=0, to=100, width=5). c# {: a4 x. o5 ^2 S& Y6 Z. B
- spin.grid(column=0, row=0)7 s! f: K+ |# R2 |4 M" R
- window.mainloop()
复制代码 也可以指定某些特定的值,而不是整个范围:$ R. V3 Y/ X, v( ] [, e
- from tkinter import *
8 L: C# s8 y# D1 N# p- l1 ?" U - 6 Q! J: N( c. y, V3 C( A
- window = Tk()
5 X) h0 {0 ? \0 k: E( ]" _) H6 \ - window.title("First Window")+ `; @# r8 i2 b. s, W
- window.geometry("350x200")$ h' v% g! S5 s( K/ j
- spin = Spinbox(window, values=(3,8,11), width=5)# b$ ]& N+ {- C0 u9 e |; E8 l7 |7 o
- spin.grid(column=0, row=0)
8 S. I( f0 f+ y - window.mainloop()
复制代码 这样,Spinbox控件就只会显示3个数字即3,8,11。! H6 y t" p% r1 I% }' l$ F
可以用如下方式给Spinbox控件设置默认值:3 s1 p- U& L! ^, l, U9 I
- var = IntVar()
8 J ]% d Y1 L; |! f, e - var.set(36)8 e7 y( @5 R3 G( o& K3 I- m
- spin = Spinbox(window, from_=0, to=100, width=5, textvariable=var)
复制代码 运行代码就可以看到36作为Spinbox控件的默认值显示了。
* ?" |. x8 F1 J6 ~添加进度条6 ^2 G+ o" V( t {
我们可以用Progressbar类创建进度条:
# Q- Y; I$ `3 W. E+ I; p- from tkinter.ttk import Progressbar' q. o0 \: I! \9 Z. ^* i+ }' |
- bar = Progressbar(window, length=200)
复制代码 设置一下进度条的值:+ l( G# E5 F0 i- ~# `% L& F
改变进度条的颜色可以按如下步骤进行:, G. X& ?8 l; n( @4 c: [
- from tkinter import *
# I4 G# C( P6 w - from tkinter.ttk import Progressbar
+ r/ k' g" E4 m0 L& r8 N# w - from tkinter import ttk
4 F( ]6 Y, \6 a. D - window = Tk()
7 L# M. |, n5 M1 s - window.title("First Window")
; N b* x1 k' B7 A0 \* y4 w- ]0 [ - window.geometry('350x200')
4 N6 ]8 ~# }% P% u' c9 z/ t - style = ttk.Style()
4 O6 s+ D/ A; Y: a1 a& ^ - style.theme_use('default')% Y' u3 h% p& f* P& z
- style.configure("black.Horizontal.TProgressbar", background='black')
& ]: }6 ^3 Y8 r - bar = Progressbar(window, length=200, style='black.Horizontal.TProgressbar')
0 [- e& C, b( e - bar['value'] = 70
. [4 s. u" ~+ ^: y; { - bar.grid(column=0, row=0)
, ~3 @: \" S6 F) q+ d6 A - window.mainloop()
复制代码
2 H# b! W# G- x5 e) \添加文件对话框4 _, s( ^$ j3 J9 W/ W/ @
我们可以按如下方式创建一个文件对话框:
. r9 U9 ?3 w! |1 k- from tkinter import filedialog2 \7 o2 x* q) h
- file = filedialog.askopenfilename()
复制代码 当你选择一个文件并点击打开,file变量将会保存该文件的路径。
) J" i4 N% C- b" z0 H* o$ I如果想一次选择多个文件并打开,我们可以用:) W, h4 y( l" `3 |
- files = filedialog.askopenfilenames()
复制代码 用filetypes参数指定文件对话框的文件类型,只需在元组中指定扩展名即可。
2 \8 z2 W0 D. N; N+ @- file = filedialog.askopenfilename(filetypes = (("Text files","*.txt"),("all files","*.*")))
复制代码 askdirectory函数可以让我们请求目录:
3 ?6 l# R2 \0 w" }, M+ e- dir = filedialog.askdirectory()
复制代码 可以用initialdir参数指定打开的初始目录:
! Q3 u4 M- x3 d- from tkinter import *
8 D, K* u1 D* J - from tkinter import filedialog
* }7 P5 j8 h, Y- s- I% i1 r - import os
0 ~' r3 y" Z2 p+ p2 f4 g& l$ k+ `7 Z
5 n) Y8 c% g1 b1 o9 a z9 x1 S8 C- window = Tk()
1 ]( ~& M! n N1 V - window.title("First Window")
0 _5 L) Q9 `+ D# O2 ] - window.geometry('350x200')1 K; }$ e0 R1 T8 Y9 b0 K$ `
- def clicked():/ @4 M! q5 `# o0 j/ {
- file = filedialog.askopenfilenames(initialdir=os.path.dirname(__file__))* s9 c% c' K; q5 v5 u
- btn = Button(window, text="Click Me", command=clicked)- g% o; c: J' t& N1 x4 w
- btn.grid(column=0, row=0)# D z- i# |$ L; m0 S$ M) o1 C
- window.mainloop()
复制代码 , m U' V6 @' Y3 y; C6 l, P
|