python中mainloop()方法的使用 说明 1、mainloop()方法允许程序循环执行,并进入等待和处理事件。 窗口中的组件可以理解为一个连环画. 2、mainloop()方法的作用是监控每个组件,当组件发生变化或触发事件时,会立即更新窗口。 实例 from tkinter import * tk = Tk() # 建立主窗口 tk.mainloop() # 进入等待与处理窗口事件 以上就是python中mainloop()方法的使用
1、问题背景在使用 Tkinter 开发 GUI 程序时,您可能会遇到这样的疑问:为什么在使用 window.mainloop() 循环时,变量不会被重新赋值为它们的初始值? 难道 window.mainloop() 的逻辑不会覆盖 canvastext,使其再次具有文本值“Hi”,而不是新的 Spinbox 值吗? 也许我对 window.mainloop() 的作用完全误解了,但如果它确实使程序不断循环执行代码,那么为什么不将变量重新赋值为它们的初始值呢? 但是,window.mainloop() 并不会重新执行 GUI 代码,所以其他代码中的变量(如 x、y、a、b)不会被修改。 希望这篇技术文章能够帮助您理解 Tkinter window.mainloop() 循环的逻辑,以及变量为什么不会被重新赋值为初始值。
= pa_threaded_mainloop_new(); if (_mainLoop ! mainLoop); if (mainloopApi ! mute = null; pa_threaded_mainloop_lock(_mainLoop); var sinkName = 0) { pa_threaded_mainloop_signal(_mainLoop, 0); return; /// 这个方法要在 pa_threaded_mainloop_lock 和 pa_threaded_mainloop_unlock 之间调用 /// </summary
(pa_threaded_mainloop* m); /*** 触发消息 */ void pa_threaded_mainloop_signal(pa_threaded_mainloop* m, int _ = pa_threaded_mainloop_new(); context_ = pa_context_new(pa_threaded_mainloop_get_api(mainloop_ (mainloop_); pa_threaded_mainloop_start(mainloop_); for (;;) { pa_context_state_t (mainloop_); } pa_threaded_mainloop_unlock(mainloop_); SIMPLE_LOG("pulse audio start ok (mainloop_); return true; unlock_and_fail: pa_threaded_mainloop_unlock(mainloop_); return
(pa_threaded_mainloop* m); /*** 触发消息 */ void pa_threaded_mainloop_signal(pa_threaded_mainloop* m, int _ = pa_threaded_mainloop_new(); context_ = pa_context_new(pa_threaded_mainloop_get_api(mainloop_ (mainloop_); pa_threaded_mainloop_start(mainloop_); for (;;) { pa_context_state_t (mainloop_); } pa_threaded_mainloop_unlock(mainloop_); SIMPLE_LOG("pulse audio start ok (mainloop_); return true; unlock_and_fail: pa_threaded_mainloop_unlock(mainloop_); return
,command=buttonClick) button.pack() window.mainloop() 同理将方法改为改变按钮上的文字 import Tkinter as tk window=tk.Tk ,command=buttonClick) button.pack() window.mainloop() 点击按钮的计数 import Tkinter as tk window=tk.Tk() count window) button=tk.Button(window,text="StrChange",command=changeStr) entry.pack() button.pack() window.mainloop window) button=tk.Button(window,text="StrChange",command=changeStr) entry.pack() button.pack() window.mainloop tk.Label(window) passwordLabel.pack() passwordEntry.pack() button.pack() confirmLabel.pack() window.mainloop
root.mainloop root.mainloop() 是 Tkinter 中的一个方法,它表示进入 Tkinter 的主事件循环(main event loop)。 一旦调用了 mainloop() 方法,程序就会进入一个循环,持续监听用户的操作,直到用户关闭了应用程序的主窗口,或者通过代码显式地中止这个循环。 mainloop() 方法负责启动这个事件循环,使得程序能够响应用户的输入,并实时更新界面的状态。 一旦调用了 mainloop() 方法,程序就会进入等待用户操作的状态,直到用户关闭了窗口或者其他结束条件被触发。 因此,通常在创建了所有的 GUI 组件后,会调用 mainloop() 方法来启动程序的主事件循环,使得用户能够与界面进行交互。
lb = Listbox(root) for item in ['python','tkinter','widget']: lb.insert(END,item) lb.pack() root.mainloop selectmode = MULTIPLE) for item in ['python','tkinter','widget']: lb.insert(END,item) lb.pack() root.mainloop selectmode = BROWSE) for item in ['python','tkinter','widget']: lb.insert(END,item) lb.pack() root.mainloop lb.delete(0,END)会删掉所有item lb.pack() root.mainloop() 6.圈选item from tkinter import * root = Tk() lb = ) lb.selection_set(6,9) #选择第7个到第10个item lb.selection_clear(7,8) #取消圈选第8个和第9个 lb.pack() root.mainloop
创建一个 Canvas,设置其背景色为白色 cv = tk.Canvas(root, bg='white') cv.create_arc((10,10,110,110),) cv.pack() root.mainloop in d: cv.create_arc((10, 10 + 60*i, 110, 110+60*i),style=d[i]) print(i, d[i]) cv.pack() root.mainloop 指定起始角度 extent=30, # 指定角度偏移量 ) print(i, d[i]) cv.pack() root.mainloop 'question', 4:'hourglass'} for i in d: cv.create_bitmap((20*i,20*i),bitmap=d[i]) cv.pack() root.mainloop =i[1], # 设置直线是否使用箭头 arrowshape='40 40 10', # 设置箭头的形状(填充长度,箭头长度,箭头宽度 ) cv.pack() root.mainloop
tk.Listbox(root) for item in ['py3study', 'python', 'tkinter']: lb.insert(tk.END, item) lb.pack() root.mainloop tk.MULTIPLE) for item in ['py3study', 'python', 'tkinter']: lb.insert(tk.END, item) lb.pack() root.mainloop tk.BROWSE) for item in ['py3study', 'python', 'tkinter']: lb.insert(tk.END, item) lb.pack() root.mainloop tk.Listbox(root) for i in range(10): lb.insert(tk.END, str(i)) lb.delete(1, 3) lb.pack() root.mainloop 10): lb.insert(tk.END, str(i)) lb.selection_set(0, 10) lb.selection_clear(0,3) lb.pack() root.mainloop
() # 创建label对象 label = tkinter.Label(screen,text="这是label控件") # 显示label,pack函数是自适应 label.pack() # 使用mainloop 方法使得窗口显示 screen.mainloop() 上面的代码是原来的,想要自己设计位置需要改label.pack()这个地方。 方法使得窗口显示 screen.mainloop() 上图就是改了之后的标签的位置,两个重要的关键字参数,x和y,就是两个坐标,横坐标和纵坐标,自己可以根据实际情况来调整 2、entry控件的位置 和 方法使得窗口显示 screen.mainloop() 3、button控件的位置 这个也是先看代码后看图 import tkinter # 创建一个窗口对象 screen = tkinter.Tk() 方法使得窗口显示 screen.mainloop() 二、窗口显示的位置 大家是不是运行程序的时候窗口默认出现在左上角,而且还很小,那么这里教大家怎么设置位置以及大小。
3, width=20) # initial size: lines,chars widget.pack(expand=YES, fill=BOTH) root.mainloop widget.config(bg='dark green', fg='white') widget.config(font=('helvetica', 20, 'underline italic')) mainloop ='Spam', command=win1.destroy).pack() Button(win2, text='SPAM', command=win2.destroy).pack() win1.mainloop if ans: Frame.quit(self) if name == 'main': Quitter().mainloop() define a name:callback demos table Label(win, image=imgobj).pack() win.mainloop() print(imgobj.width(), imgobj.height()) # show size
Tkinter: 创建顶层窗口: # -*- coding: utf-8 -*- from Tkinter import * root = Tk() root.title("顶层窗口") root.mainloop label.pack() root.mainloop() 加入一些参数: # -*- coding: utf-8 -*- from Tkinter import * root = Tk() root.title , height=10, width=30, fg="black", bg="pink") label.pack() root.mainloop() Frame: # -*- coding: utf-8 relief) Label(f, text=relief, width=10).pack(side=LEFT) f.pack(side=LEFT, padx=5, pady=5) root.mainloop text="0") entryCd.pack() btnCal = tk.Button(top, text="计算", command=cToFClicked) btnCal.pack() top.mainloop
# 单位 px # 1920*1080 表示在屏幕在宽度上上有1920个点, 高度上有1080个点 win.geometry("1700x400+0+200") # 显示win窗口 win.mainloop ", fg="#ff0000",font=("宋体",30) )# 显示labellabel.pack() win.mainloop 小明"))# 退出btn = tkinter.Button(win,text="登陆",width=7,bg="#ffcccc",command=win.quit)# 显示btn.pack() win.mainloop button = tkinter.Button(win,text="获取值",width=7,bg="#ffcccc",command=func)entry.pack()button.pack()win.mainloop "line2",value=("普京",60,"莫斯科"))table.insert("",2,text="line3",value=("莫迪",68,"新德里"))table.pack() win.mainloop
代码如下 import tkinter 二、创建一个简单的界面 import tkinter # 创建一个窗口对象 screen = tkinter.Tk() # 使用mainloop方法使得窗口显示 screen.mainloop() 上面的代码执行之后的效果如下图所示 三、开始布局界面 界面就这样的干干巴巴的不怎么好看,所以我们需要对我们的界面进行基本的布局,在这之前,咱们需要进行一些控件的学习 方法使得窗口显示 screen.mainloop() 效果如图所示 2、entry控件 这是一个输入框的控件,类似前端的text类型,这里是怎么实现的呢,话不多说,上代码 import tkinter 方法使得窗口显示 screen.mainloop() 效果如下图所示 咱们先设置输入框里面的值,然后再获取一下 import tkinter # 创建一个窗口对象 screen = tkinter.Tk 方法使得窗口显示 screen.mainloop() 效果如图 四、总结 以上就是tkinter的一些基础部分的讲解了,相信大家也有了一定的了解,那么下一篇会更新中级的部分!
认识Tkinter模块,写一个简单的GUI程序 import tkinter as tk # 引入tkinter模块,并命名为tk win = tk.Tk() # 创建主窗口 win.mainloop # 要显示的内容 b = tk.Label(win, text=text).pack() # 进入消息循环,显示窗口界面 win.mainloop() 你可以将上述代码保存在一个扩展名为pyw的的文件里 ,anchor='w') c.pack() win.mainloop() ? 5. 复选框控件:Checkbutton Checkbutton用来创建复选框。 Message(win,text=txt).pack() win.mainloop() ? 11. msg.pack() Button(root, text="创建独立窗口", command=create_toplevel).pack() mainloop() ?
如果在 Nexus 类的 __init__ 方法中创建顶层窗口并启动 mainloop(),会有什么不同? 2、解决方案2.1 解释问题在 Tkinter 中,mainloop() 方法是一个无限循环,它会持续处理事件,直到窗口被关闭。一旦进入 Tk.mainloop,就不会执行任何其他代码。 如果在 Nexus 类的 __init__ 方法中创建顶层窗口并启动 mainloop(),那么 __init__ 方法就永远不会返回,这是意外的。 此外,如果在 Nexus 类的 __init__ 方法中创建顶层窗口并启动 mainloop(),那么就不可能创建多个 Nexus 实例,因为一旦创建一个 Nexus 实例,Tk.mainloop 就会接管 self.label = Label(self.main_window, text="Tkinter") self.label.pack()但是,需要确保在 __init__ 方法的末尾调用 mainloop
text='python',variable=var1,onvalue=1,offvalue=0,command=show) CheckOne.pack() CheckTwo.pack() window.mainloop tk.HORIZONTAL,length=600,showvalue=0,tickinterval=1,resolution=1,command=show) scaleOne.pack() window.mainloop canvasOne.create_rectangle(330, 30, 330+20, 30+20) # 画矩形正方形 canvasOne.pack() window.mainloop ='one1',command=new) two.add_command(label='one2',command=new) window.config(menu=mainMenu) window.mainloop (title='4',message='asfasfsfsfsf')) tk.Button(window,text='in frame1',command=show).pack() window.mainloop
wxPython,pyQT 1、 from tkinter import Label widget=Label(None,text='Hello Gui') widget.pack() widget.mainloop from tkinter import * widget=Label(None,text='Hello Gui') widget.pack(expand=YES,fill=BOTH) widget.mainloop button import sys from tkinter import * w=Button(None,text="tetxxx",command=sys.exit) w.pack() w.mainloop .pack(side=TOP) Button(win, text='Quit', command=win.quit).pack(side=RIGHT, expand=YES,fill=X) win.mainloop % self.data) if name == 'main': Hello().mainloop() 15、Hello.widget() 父类和子类的方法都执行 image.png 16、tkinter
为输出限定范围的数字区间,可以为之指定最大值,最小值及步距值 创建一个Scale 代码: import tkinter as tk root = tk.Tk() tk.Scale(root).pack() root.mainloop tk root = tk.Tk() tk.Scale(root, from_=-500, to=500, resolution=5, orient='horizontal').pack() root.mainloop root, from_=1, to=100, resolution=1, orient='horizontal', variable=v) scale.pack() print(v.get()) root.mainloop command=printscale # 设置回调函数 ).pack() print(v.get()) root.mainloop command=printscale # 设置回调函数 ).pack() print(v.get()) root.mainloop