python TK库简单应用(实时显示子进程输出)

阅读: 评论:0

python  TK库简单应用(实时显示子进程输出)

python TK库简单应用(实时显示子进程输出)

#!/usr/bin/python3.5
# -*- coding: UTF-8 -*-import tkinter         # 导入 Tkinter 库
ssagebox             # 导入消息框库
import os						#导入OS库
import subprocessdef show_something():ssagebox.showinfo( "Python", "Hello everyone")def show_while():if button3['text'] == 'WHILE_run':button3['text'] = 'WHILE_close'else:button3['text'] = 'WHILE_run'data = subprocess.Popen('./a.out',stdout = subprocess.PIPE,stdin=subprocess.PIPE,shell=True)while True:	'''与子进程通信,给它输入data.stdin.write(("abcdfn").encode())data.stdin.flush()''&#fig(state='normal')#设置为可编辑#t1.delete('1.0','end')  #清空文本框t1.insert('end',adline())t1.see('end')#设置显示最末尾的数据t1.update()t1.config(state='disabled')#设置为无法编辑def show_ls():t2.config(state='normal')#设置为可编辑t2.delete('1.0','end')  #清空文本框t2.insert('end',os.popen('ls').read())t2.config(state='disabled')#设置为无法编辑#---创建窗口对象---
root_window = tkinter.Tk()
root_window.title('TEST BY FC')
ry('500x500')#---创建容器---
main_frame = tkinter.Frame(root_window)
main_frame.pack()#---创建列表---
li     = ['C','python','php','html','SQL','java']
#---创建两个列表组件---
listb  = tkinter.Listbox(root_window)         
#---给小部件插入数据---
for item in li:                listb.insert(0,item)
listb.pack()#---创建子容器,在子容器上创建Label---
frm1 = tkinter.Frame(main_frame)
frm1.pack()
tkinter.Label(frm1, text='hello', bg='green', width=10, height=2).pack(side='left')
frm2 = tkinter.Frame(main_frame)
frm2.pack()
tkinter.Label(frm1,text=' world', bg='yellow', width=10, height=2).pack(side='right')#创建按钮
button_frm = tkinter.Frame(root_window)
button_frm.pack()
button1 = tkinter.Button(button_frm, text = "确定", bg='red', fg='white', width=10, height=2, command = show_something)
button1.pack()
button2 = tkinter.Button(button_frm, text = "LS", bg='blue', fg='white', width=10, height=2, command = show_ls)
button2.pack()
button3 = tkinter.Button(button_frm, text = "WHILE_run", bg='green', fg='white', width=10, height=2, command = show_while)
button3.pack()#创建滚动条
s1=tkinter.Scrollbar()
s1.pack(side='right',fill='y') # side是滚动条放置的位置,上下左右。fill是将滚动条沿着y轴填充#创建文本显示框
t1 = tkinter.Text(bg='lightgreen',width=30, height=10,state='disabled',yscrollcommand=s1.set)#设置为无法编辑
t1.pack()
s1.config(command=t1.yview)
t2 = tkinter.Text(bg='lightblue',width=10, height=2,state='disabled')#设置为无法编辑
t2.pack()#t2.config(yscrollcommand=s1.set)#---进入消息循环---
root_window.mainloop()               

利用TK库做了一个简单的界面,很多细节没有处理,只供学习使用

其中.a.out是一个循环输出的程序,printf输出需要加fflush(stdout)清空缓冲区才可以,cout会自动清空

如果需要给子程序传入输入,可以用stdin.write,注意要清空输缓冲:

data.stdin.write(("2n").encode())
data.stdin.flush()

效果如下

本文发布于:2024-01-28 23:03:13,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170645419810930.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:实时   进程   简单   python   TK
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23