我一直在努力学习如何使用Kivy python,我想 知道如何与Os控制台/终端交互以运行命令和 收到结果。到目前为止我看过的教程只展示了如何创建 窗口小部件,按钮等 例如,如何通过运行命令得到结果" uname" 显示在kivy。有了这样的代码如下。使用"按下"。如何让它与操作系统交互运行命令并将其显示在kivy应用程序中。是否有关于创建桌面应用程序/实用程序的教程
from kivy.app import App
from kivy.uix.button import Button
class tutap(App):
def build(self):
return Button(text="Press here")
tutap().run()
更新: 这是我想要实现的例子。这使用了easygui模块:
import subprocess
from easygui import *
msg= "what you want"
out = subprocess.check_output("uname -a",shell=True)
title = "My choice"
choices=["kernel version","nothing"]
choice=boolbox(msg,title,choices)
if choice==1:
msgbox(out)
elif choice==0:
msgbox("The End")
答案 0 :(得分:0)
我真的没有看到做这样的事情,但如果你想要你可以在单独的线程中调用App.run()
方法,所以它不会阻止命令行。
使用cmd
模块的示例:
import logging
logging.getLogger("kivy").disabled = True
from kivy.app import App
from kivy.uix.listview import ListView
from cmd import Cmd
from threading import Thread
class MyApp(App):
def build(self):
self.lv = ListView()
return self.lv
def update(self, line):
self.lv.adapter.data.append(line)
return "list updated"
class MyCmd(Cmd, object):
def __init__(self, app, *args):
super(HelloWorld, self).__init__(*args)
self.app = app
def do_EOF(self, line):
self.app.stop()
return True
def default(self, line):
ret = self.app.update(line)
print(ret)
if __name__ == '__main__':
app = MyApp()
Thread(target=app.run).start()
MyCmd(app).cmdloop()
答案 1 :(得分:0)
这里我是如何获得控制台命令输出的。
首先是python代码:
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.popup import Popup
from kivy.properties import ObjectProperty
from kivy.uix.label import Label
import subprocess
class shellcommand(BoxLayout):
first=ObjectProperty()
second=ObjectProperty()
third=ObjectProperty()
def uname(self):
v=subprocess.check_output("uname -a",shell=True)
result=Popup(title="RESULT",content=Label(text="kernel is\n" + v))
result.open()
def date(self):
d=subprocess.check_output("date",shell=True)
res=Popup(title="DATE",content=Label(text="the date today is\n" + d))
res.open()
def last(self):
last=subprocess.check_output("w",shell=True)
ls=Popup(title="LOGIN",content=Label(text="logged in \n" + last))
ls.open()
class shellApp(App):
def build(self):
return shellcommand()
shellApp().run()
然后是名为shellapp.kv的kivy文件
<shellcommand>:
orientation: "vertical"
first:one
second:two
third:three
canvas:
Rectangle:
source: "snaps.png" #location of any picture
pos: self.pos
size: self.size
BoxLayout:
orientation: "horizontal"
Button:
id:one
text: "UNAME"
background_color: 0,0,0,1
font_size:32
size_hint:1,None
on_press: root.uname()
Button:
id:two
text: "DATE"
background_color: 1,1.5,0,1
font_size:32
size_hint:1,None
on_press: root.date()
Button:
id: three
text: "LOGGED IN"
background_color: 1,0,0,1
font_size:32
size_hint: 1,None
on_press: root.last()
如果有办法改进此代码,请告诉我如何操作。谢谢
答案 2 :(得分:0)
我能想到的最简单的方法就是创建一个函数来写入文件顶部的文件,如下所示
def printlog(message):
with open('./log.txt','a') as f: f.write(message+"\n")
然后在您的程序中,如果您想要打印输出,只需放置printlog("whatever you wanted printed!")
该文件将保存在与程序相同的文件夹中。 理论上,你可以在程序运行时打开它,但这对于postmourtum来说更有用。