我正在编写一个程序来读取和修改包含某些图像的信息的二进制文件:但是为了能够做到这一点,它还需要来自用户的一些信息,让我们说文件夹在哪里这个图像位于几个选择。
通过对网络的快速研究,我发现创建GUI的一种简单方法是Tkinter,事实上我很快达到了目标。
特别是我使用了tkFileDialog
和tkMessageBox
模块而无需调用mainloop
函数,每当我想在屏幕上显示某些内容时创建并销毁一个窗口:我不会'我认为这是正确的方法,但它非常适合我的应用程序,因为通过这种方式,我能够保留程序,因为它必须在#34; talk"与用户一起使用,无需使用纯粹反对的导向结构进行重构,如同真实的" GUI。
当我想改进这个界面并使用按钮小部件来提供从三个选项中进行选择的可能性时出现问题:在这种情况下,mainloop
似乎是强制性的.. < / p>
所以这就是问题:它是否存在与用户通信的策略,而不必将所有函数放在GUI类中而不使用无限循环? (我认为使用Tkinter的答案是否定的) 这种混合情况下最好的方法是什么?
答案 0 :(得分:1)
我把骨架放在了一起。几点评论:
grid
个可选参数来拥有漂亮的GUI。 总结上面的评论,目标是分离不同的部分:第一个模块将包含所有计算,但不会处理用户输入,第二个模块将使用命令行用户输入并依赖第一个用于计算,第三个用于计算,并且还依赖于第一个用于计算。您还可以为测试添加第四个。 当然,只要您知道原因,请随时修改此模式。
欢迎评论。
第一个模块:
#file base.py
def f1(input1):
...
return res1
def f2(res1, input2):
...
return res2
def f3(res2):
...
return res3
if __name__ == '__main__':
r1 = f1('directoryPath')
r2 = f2(r1, 'fileName')
r3 = f3(r2)
第二个模块:
#file commandline.py
from base import *
i1 = input() # in 3.X, raw_input in 2.X
r1 = f1(i1)
i2 = input() # in 3.X, raw_input in 2.X
r2 = f2(r1, i2)
r3 = f3(r2)
第三个模块:
#file GUI.py
from base import *
import tkinter as tk # in 3.X, Tkinter in 2.X
def compute():
i1 = e1.get()
r1 = f1(i1)
i2 = e2.get()
r2 = f2(r1, i2)
r3 = f3(r2)
l1.configure(text = r3) #if r3 is a string else str(r3)
app = tk.Tk()
e1 = tk.Entry(app)
e1.grid()
e2 = tk.Entry(app)
e2.grid()
b1 = tk.Button(app, text = "Compute", command = compute)
b1.grid()
l1 = tk.Label(app)
l1.grid()
app.mainloop()