-2

我一直在研究使用 Tkinter 从一个 Tkinter 软件打开 exe 文件。我的最终产品是一个 Windows 7 exe 文件,它运行从一个 Tkinter 软件转换为 exe 文件的所有 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()
4

2 回答 2

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()
于 2013-02-25T02:05:09.380 回答
1

这就是我为使事情顺利进行所做的工作, 我采用了 f3ar3dlegend 示例代码(向上滚动)并开始研究它,因为它运行良好。让我们讨论一下最上面的代码行,然后逐步进行全面分解。

from Tkinter import *
from PIL import Image, ImageTk
import os

从 Tkinter 导入,这告诉 pyhton 加载 GUI 驱动程序。从 PIL 导入 Image,ImageTK 告诉 Python 加载 Pyhton 图像库,以便我们可以使用彩色照片。根据我的理解, import os 会加载驱动程序,因此 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 是一个按钮标注。你按下按钮,它会发出一个标注,匹配的 def 服从调用的分析器。os.startfile 对我来说是一个新术语,但它只是意味着操作系统启动文件。("confileditor.exe") 表示您需要的文件的字符串名称在 (" ") 之间,将两者放在一起,文件在自己的窗口中运行。这个软件的最后一点我和平相处,然后说我可以用这个做更多。我再次开始使用 f3ar3dlegend 示例代码。

   root = Tk()
   app = App(root)
   mainloop()

这基本上会关闭所有内容,因此 Python 知道是时候显示内容了,而 mainloop 告诉 Tkinter 等待我做事。问题是软件有时会在页面上打开一半,而有时会在屏幕上的任何位置打开,所以我添加了此代码以将软件放在屏幕的左上角。

   app = App(root)
   root.geometry('+0+0')
   mainloop()

我做的最后一件事是在尝试 5 次或 6 次尝试后单击一个按钮即可退出软件,我让 Tkinter 按下按钮即可破坏软件窗口。代码是。

   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 小时修补它以使其恰到好处。我确实学到了关于将程序放到网上以便人们可以下载它们的一个非常重要的教训是您需要联系您的主机的客户支持并要求提供 TOS 服务条款的链接,因为如果您不了解 TOS,您可能会违反国际法做出版。谢谢你。

于 2013-02-25T22:49:39.163 回答