鱼C论坛

 找回密码
 立即注册
查看: 1975|回复: 16

[已解决]如何让 Tk 弹窗在函数之前显示。

[复制链接]
发表于 2020-6-8 15:19:55 | 显示全部楼层 |阅读模式
5鱼币
达到的效果:
        第一步,先弹出弹窗。
        然后在执行函数。

感谢,感谢


源代码:
——————————————————————————————————
from tkinter import*
import time

def gia():
    print('第二步,执行函数')
    time.sleep(3)
    
root = Tk()

var_r_wa = StringVar()
var_r_wa.set('第一步,弹出窗口')

top_W = Toplevel(root)
label_r_wa =Label(top_W,textvariable= var_r_wa)
label_r_wa.grid()

gia()

root.mainloop()
——————————————————————————————————————————
最佳答案
2020-6-8 15:19:56


Python 就是这样 入门容易 精通登天啊

最佳答案

查看完整内容

Python 就是这样 入门容易 精通登天啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-8 15:19:56 | 显示全部楼层    本楼为最佳答案   


Python 就是这样 入门容易 精通登天啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-8 15:27:38 | 显示全部楼层
什么意思 你是想先弹窗 显示 第一步,弹出窗口 然后在显示 第二步,执行函数?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-8 15:28:23 | 显示全部楼层
from tkinter import*
import time

def gia():
    print('第二步,执行函数')
    
root = Tk()

var_r_wa = StringVar()
var_r_wa.set('第一步,弹出窗口')

top_W = Toplevel(root)
label_r_wa =Label(top_W,textvariable= var_r_wa)
label_r_wa.grid()

root.mainloop()

gia()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-8 15:33:05 | 显示全部楼层
from tkinter import messagebox as g
from tkinter import *

root = Tk()

var_r_wa = StringVar()

def gia():
    top_W = Toplevel(root)
    var_r_wa.set('第二步,执行函数')
    print('第二步,执行函数')
    label_r_wa = Label(top_W, textvariable=var_r_wa)
    label_r_wa.grid()

g.showinfo(message='第一步,弹出窗口')

gia()

mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-8 15:38:08 | 显示全部楼层
Twilight6 发表于 2020-6-8 15:27
什么意思 你是想先弹窗 显示 第一步,弹出窗口 然后在显示 第二步,执行函数?

对的,我想要 弹窗在 函数之前显示,好像各种方法都不行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-8 15:38:45 | 显示全部楼层

感谢回复。我想要弹窗一直保持。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-8 15:39:51 | 显示全部楼层
python羊 发表于 2020-6-8 15:38
感谢回复。我想要弹窗一直保持。

time 模块使用会让Tkinter 窗口卡顿到sleep结束
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-8 15:42:24 | 显示全部楼层
Twilight6 发表于 2020-6-8 15:27
什么意思 你是想先弹窗 显示 第一步,弹出窗口 然后在显示 第二步,执行函数?

感谢大哥,下面的代码,我试运行了。但是还是需要进行    确认   。请问是否可以不用 操作,直接,先弹窗  在 打印  def gia()的值。再次感谢您。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-8 15:57:50 | 显示全部楼层
Twilight6 发表于 2020-6-8 15:39
time 模块使用会让Tkinter 窗口卡顿到sleep结束

是的,阻塞了。可能要用到异步才行,我还没学会异步啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-8 16:01:10 | 显示全部楼层
python羊 发表于 2020-6-8 15:57
是的,阻塞了。可能要用到异步才行,我还没学会异步啊。

哈哈 那就慢慢来  学学多线程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-8 16:05:59 | 显示全部楼层
Twilight6 发表于 2020-6-8 16:01
哈哈 那就慢慢来  学学多线程

越来越难系列
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-9 16:08:54 | 显示全部楼层
经过一番学习。使用多线程可以解决,线程被阻塞时,top弹窗 卡住的问题。
解决代码如下:
from tkinter import*
import time
import threading

root = Tk()
def gia():
    time.sleep(3)
    print('第二步,执行函数')
    
def top():    
    var_r_wa = StringVar()
    var_r_wa.set('第一步,弹出窗口')

    top_W = Toplevel(root)
    label_r_wa = Label(top_W,textvariable= var_r_wa).grid()

    
def main():
    added_thread = threading.Thread(target=gia)
    added_thread.start()
    top()
   
main()
  
root.mainloop()

点评

问题解决了,那就设置下【最佳答案】呗~  发表于 2020-7-23 19:11
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-22 18:55:44 From FishC Mobile | 显示全部楼层
úgiaroot.mainloop()

评分

参与人数 1鱼币 +2 收起 理由
python羊 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-23 14:11:26 | 显示全部楼层
推荐弹窗使用子线程执行,函数是用主线程执行,避免主线程关闭时子线程是否关闭未知。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-8-13 09:02:47 | 显示全部楼层
nahongyan1997 发表于 2020-7-23 14:11
推荐弹窗使用子线程执行,函数是用主线程执行,避免主线程关闭时子线程是否关闭未知。

感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 11:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表