很多命令行程序运行都是需要一定专业知识的,需要用户懂基本的dos命令或者linux命令。为了实现可视化简易版本的桌面可执行程序,小编我尝试用Python来做一层封装。
首先,需要用python做一个可视化界面出来,让用户无需输入命令行参数,直接在可视化的窗口界面里填写参数即可。使用 Python的 tkinter库,窗体元素代码如下:
label1 = tkinter.Label(top, text=“XMR Pool”, width=15)
pool = tkinter.Entry(top, width=25)
label2 = tkinter.Label(top, text=“XMR钱包地址”, width=15)
wallet = tkinter.Entry(top, width=25)
label3 = tkinter.Label(top, text=“CPU使用率(%)”, width=15)
cpu = tkinter.Entry(top, width=25)
label4 = tkinter.Label(top, text=“线程数”, width=15)
threads = tkinter.Entry(top, width=25)
label5 = tkinter.Label(top, text=“当前算力(H/s)”, width=15)
varhs = tkinter.StringVar(top, value=‘0’)
hstext = tkinter.Entry(top, textvariable=varhs, width=25)
label6 = tkinter.Label(top, text=“出块数量”, width=15)
varblock = tkinter.StringVar(top, value=‘0’)
blocktext = tkinter.Entry(top, textvariable=varblock, width=25)
scr = ScrolledText.ScrolledText(top, font=(“隶书”,12))
采用表格式布局方法,将这些文本框、输入框、按钮规则的显示到窗口上,代码如下:
label1.grid(row=0, column=0, sticky=‘w’)
pool.grid(row=0, column=1, sticky=‘w’)
label2.grid(row=0, column=2, sticky=‘w’)
wallet.grid(row=0, column=3, sticky=‘w’)
helpButton.grid(row=0, column=4, sticky=‘w’)
label3.grid(row=1, column=0, sticky=‘w’)
cpu.grid(row=1, column=1, sticky=‘w’)
label4.grid(row=1, column=2, sticky=‘w’)
threads.grid(row=1, column=3, sticky=‘w’)
minerButton.grid(row=1, column=4, sticky=‘w’)
label5.grid(row=2, column=0, sticky=‘w’)
hstext.grid(row=2, column=1, sticky=‘w’)
label6.grid(row=2, column=2, sticky=‘w’)
blocktext.grid(row=2, column=3, sticky=‘w’)
scr.grid(row=3, column=0, columnspan=4, sticky=‘w’)
界面做好后,怎么启动命令行程序呢?这里就需要用到Python调用进程的函数了,在“开始”按钮被点击时,直接调用命令行进程xmrig
myPopenObj = subprocess.Popen(command, stdout=subprocess.PIPE)
不过由于xmrig是独占进程,直接调用的话,会导致按钮按下抬不起来,因为主线程被占用了。因此需要用到python新建线程功能,让挖矿程序运行在一个独立的新的线程里:
_thread.start_new_thread(start_miner, (command,))
这样按钮点下去,进程就启动了,但进程到底运行的是否正常,连接网络是否成功呢?这些信息其实都在xmrig进程的log打印里,我们需要把这些打印也输出到窗口的文本框里,让用户能看到进程运行状况,因此我们需要在一个 while 循环里反复去读取进程的打印,把它输出到屏幕上。
while isMining: # 将内容持续输出
line = myPopenObj.stdout.readline().decode(“gbk”).strip() + “\n”
至此,一个可视化程序即可诞生了,但为了用户方便使用,还应该把它打包为exe,这里就需要用到python的pyinstaller库,打包完双击即可运行,效果如下: