鱼C论坛

 找回密码
 立即注册
查看: 5611|回复: 3

[已解决]Tkinter 如何将函数执行的内容显示到框架中

[复制链接]
发表于 2017-6-12 18:19:08 | 显示全部楼层 |阅读模式
20鱼币
#最近在学 GUI 做爬虫小程序遇到的一个问题: 我想把command每次调用的爬虫函数返回到框架中显示,请问大牛如何实现
如下:我想把 aaa函数的返回值 print('比如这是段爬虫代码') 显示在 GUI 中
最佳答案
2017-6-12 18:19:09
本帖最后由 dori233 于 2017-6-13 17:52 编辑

刚好这几天学了tk

看得出来LZ的意图就是GUI在运行中,程序运行然后GUI的界面更新内容.

分享点经验.
gui程序啊,在你写了mainloop这句以后,GUI就进入了循环状态了.
它只接受事件.
所以想要改变gui程序,必须要在mainloop之前设计事件.

让事件去驱动界面获得改变.


小小一段实例:
  1. class Gui(object):
  2.    
  3.     def __init__(self):
  4.         self.master = Tk()
  5.         self.text = Entry(self.master, text='')
  6.         # 设置布局
  7.         self.button = Button(self.master, text='开始', command=self.get_text)
  8.         self.button.pack()
  9.         self.text.pack()

  10.         # mainloop 也可以搞成外部加上,加上mainloop后整个GUI就进入了循环状态了
  11.         self.master.mainloop()

  12.     def get_text(self):
  13.         text = test()
  14.         self.text.insert(INSERT, text)


  15. def test():
  16.     return '你好啊'

  17. gui = Gui()
复制代码


按钮button 我绑定了一个方法 get_text
而get_text 方法里面 调用了test()这个函数,
获取返回的文字然后添加到Entry中去...

然而实际中,如果你想随着 其他函数运行 导致某些值发生变化,你想要用GUI把这些变化显示出来.
你也可以制造个事件专门去监视那个值值得变化.
after是个不错的选择,记住千万不要在GUI程序里加while

什么占位啊,方框大小啊,拉杆条啊没做,不过只想说明一点
想在GUI中更新内容,你必须制造事件方法,事件方法必须加到mainloop()前

当然你也可以写完整条程序,然后最后才加入mainloop()

1.jpg

最佳答案

查看完整内容

刚好这几天学了tk 看得出来LZ的意图就是GUI在运行中,程序运行然后GUI的界面更新内容. 分享点经验. gui程序啊,在你写了mainloop这句以后,GUI就进入了循环状态了. 它只接受事件. 所以想要改变gui程序,必须要在mainloop之前设计事件. 让事件去驱动界面获得改变. 小小一段实例: 按钮button 我绑定了一个方法 get_text 而get_text 方法里面 调用了test()这个函数, 获取返回的文字然后添加到Entry中去... 然 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-12 18:19:09 | 显示全部楼层    本楼为最佳答案   
本帖最后由 dori233 于 2017-6-13 17:52 编辑

刚好这几天学了tk

看得出来LZ的意图就是GUI在运行中,程序运行然后GUI的界面更新内容.

分享点经验.
gui程序啊,在你写了mainloop这句以后,GUI就进入了循环状态了.
它只接受事件.
所以想要改变gui程序,必须要在mainloop之前设计事件.

让事件去驱动界面获得改变.


小小一段实例:
  1. class Gui(object):
  2.    
  3.     def __init__(self):
  4.         self.master = Tk()
  5.         self.text = Entry(self.master, text='')
  6.         # 设置布局
  7.         self.button = Button(self.master, text='开始', command=self.get_text)
  8.         self.button.pack()
  9.         self.text.pack()

  10.         # mainloop 也可以搞成外部加上,加上mainloop后整个GUI就进入了循环状态了
  11.         self.master.mainloop()

  12.     def get_text(self):
  13.         text = test()
  14.         self.text.insert(INSERT, text)


  15. def test():
  16.     return '你好啊'

  17. gui = Gui()
复制代码


按钮button 我绑定了一个方法 get_text
而get_text 方法里面 调用了test()这个函数,
获取返回的文字然后添加到Entry中去...

然而实际中,如果你想随着 其他函数运行 导致某些值发生变化,你想要用GUI把这些变化显示出来.
你也可以制造个事件专门去监视那个值值得变化.
after是个不错的选择,记住千万不要在GUI程序里加while

什么占位啊,方框大小啊,拉杆条啊没做,不过只想说明一点
想在GUI中更新内容,你必须制造事件方法,事件方法必须加到mainloop()前

当然你也可以写完整条程序,然后最后才加入mainloop()

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

使用道具 举报

发表于 2017-6-12 19:39:13 | 显示全部楼层
aaa返回值是None, print是没有返回值的。直接返回字符串即可。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-13 17:48:32 | 显示全部楼层
每个学GUI的都会遇到这个问题,就是程序进入假死状态
要刷新界面就要多线程,用分线程去刷新界面
当初我学TK就是在这个地方搞不清楚,所以放弃了
。。。
然后,我学了PYQT,又遇到这个问题,但是还好,pyQT的多线程信号传递给我的感觉非常爽,所以我搞定了这个问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 01:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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