我一直在研究如何使用Tkinter从一个Tkinter软件中打开exe文件。我的最终产品是一个Windows 7 exe文件,它运行了一个转换为exe文件的Tkinter软件的所有exe文件。
我将从上到下解释我的代码 这是我的各种各样的Tkinter模板
from Tkinter import *
from PIL import Image, ImageTk
import os
class App:
def __init__(self, master):
self.frame = Frame(master)
我添加了一张图片,为用户提供了如何使用该软件的信息
img = Image.open("data.gif")
intro = ImageTk.PhotoImage(img)
right = Label(None, image=intro)
right.grid(row=0, column=0, columnspan=4)
right.image=intro
然后我在网格中添加了按钮,调用每个按钮self.b真的在堆栈溢出时混淆了这里的人。你很快就会看到评论。
self.b = Button(self.frame, bg="red", fg="white", font=("Helvetica", 14), text = ' \n confilextracter \n ', command = self.openFile1)
self.b.grid(row = 1, column=0)
self.b = Button(self.frame, bg="red", fg="white", font=("Helvetica", 14), text = ' \n confileditor \n ', command = self.openFile2)
self.b.grid(row = 1, column=1)
self.b = Button(self.frame, bg="red", fg="white", font=("Helvetica", 14), text = ' \n confilerehasher \n ', command = self.openFile3)
self.b.grid(row = 1, column=2)
self.b = Button(self.frame, bg="red", fg="white", font=("Helvetica", 14), text = ' \n Turn off the Shed \n ', command = self.openFile4)
self.b.grid(row = 1, column=3)
self.frame.grid()
接下来我不得不给按钮作业执行,重命名exe文件真的让人困惑,这里堆栈溢出。抱歉。
def openFile1(self):
os.startfile("confilextracter.exe")
def openFile2(self):
os.startfile("confileditor.exe")
def openFile3(self):
os.startfile("confilerehasher.exe")
我真的想要最后一个按钮代码更正女巫我自己找到了答案,因为其他人都在忙着整理这段代码的所有其他部分,因为你很快就会看到。此时此下一个按钮中有错误。
def openFile4(self):
self.b.configure(command = self.b.destroy)
然后我关闭了文件
root = Tk()
app = App(root)
mainloop()
答案 0 :(得分:2)
使用os
模块:
from Tkinter import *
import os
class App:
def __init__(self, master):
self.frame = Frame(master)
self.b = Button(self.frame, text = 'Open', command = self.openFile)
self.b.grid(row = 1)
self.frame.grid()
def openFile(self):
os.startfile(_filepath_)
root = Tk()
app = App(root)
root.mainloop()
答案 1 :(得分:1)
这就是我做的事情, 我拿了f3ar3dlegend示例代码(向上滚动)并开始处理它,因为它工作得很好。 让我们谈谈最重要的代码行,然后按顺序完成细分。
from Tkinter import *
from PIL import Image, ImageTk
import os
从Tkinter导入,这告诉pyhton加载GUI驱动程序。从PIL导入Image,ImageTK告诉Python加载Pyhton图像库,以便我们可以使用彩色照片。导入这个到我的理解加载驱动程序,所以Python可以从python应用程序运行外部程序,将它们调用为动作。
我做的第一件事就是将图像添加到f3ar3dlegend的代码中,以便为我的用户提供包含此代码的信息页面,
class App:
def __init__(self, master):
self.frame = Frame(master)
img = Image.open("data.gif")
intro = ImageTk.PhotoImage(img)
right = Label(None, image=intro)
right.grid(row=0, column=0, columnspan=4)
right.image=intro
一行代码让我停止了24小时的图像只是简单地丢失代码
right.image=intro
这行代码阻止你的图像被垃圾收集(这意味着什么)我只知道我添加了它,并且我的照片应该放在def里面。
接下来我做了大量的工作是按钮格式化,你知道宽度大小颜色字体。弄清楚使用self.frame是纯粹的猜测我只是一直在尝试想法,直到我的一个小工作。我在Python Tkinter Grid上也有这一切,所以图像在第0行和列上有4或5列,以便为更多按钮腾出空间。这些按钮都在第1行而不是第0行。我发现我可以调用所有按钮self.b,只要命令是不同的def,代码没有错误。
self.b = Button(self.frame, bg="darkred", width=18, fg="white", font=("Arial", 14), text = ' \n confilextracter \n ', command = self.openFile1)
self.b.grid(row = 1, column=0)
self.b = Button(self.frame, bg="red", width=17, fg="white", font=("Arial", 14), text = ' \n confileditor \n ', command = self.openFile2)
self.b.grid(row = 1, column=1)
我接下来要做的就是def,因为如果没有这些按钮就无法工作。股票溢出的原因是我上传病毒的原因是我更改了程序名称,以便让我更好地理解我的编程。
def openFile1(self):
os.startfile("confilextracter.exe")
def openFile2(self):
os.startfile("confileditor.exe")
它的工作原理如下。 openFile1是一个Button标注。你按下按钮,它会发出一个标注,匹配的def会服从呼叫的anser。 os.startfile对我来说是一个新术语,但它只是意味着操作系统启动文件。 (“confileditor.exe”)说你需要的文件的字符串名称在(“”)之间放在一起,文件在自己的窗口中运行。 这个软件的最后一点我和平在一起,然后说我可以用这个做更多的事情。我开始再次使用f3ar3dlegend示例代码。
root = Tk()
app = App(root)
mainloop()
这基本上将所有内容都关闭,因此Python知道是时候显示内容,而mainloop告诉Tkinter等我做的事情。问题是软件在页面上有一半时间打开,有时在屏幕上的任何地方打开,所以我添加了这段代码将软件放在屏幕的左上角。
app = App(root)
root.geometry('+0+0')
mainloop()
我做的最后一件事是在尝试5或6次尝试后点击按钮退出软件按钮我只需按一下按钮即可破坏软件窗口。代码是。
self.b = Button(self.frame, bg="red", width=18, fg="white", font= ("Arial", 14), text = ' \n Turn off the Shed \n ', command = self.openFile4)
self.b.grid(row = 1, column=3)
def openFile4(self):
root.destroy()
我已经看到了使用root.destory错误的人群堆栈溢出的无法解释的例子,难道我用它修整了1个小时来使它恰到好处。 我所学到的一个非常重要的经验是如何将程序放到网上以便人们可以下载它们是你需要联系主机的Customber支持并要求链接到那里的TOS服务条款,因为如果你不理解TOS你可能违反国际法做出版。谢谢。