python - 如何在按钮前面使用 tkinter-python 添加文本框,当我单击它们时,结果应显示在添加的文本框中
问题描述
我使用 Tkinter-python 在 python 中开发了一个简单的应用程序,其中选择图像导航任何带有图像的文件夹。方法 1 和 2 按钮具有两种不同的功能,用于分析从文件夹/路径中选择的图像。我想在方法 1 和 2 前面添加两个文本框,这样当我单击方法 1 时,结果应该打印在方法 1 之后添加的文本框 1 上,同样在第二个按钮上。如果可能,将确认添加从“选择图像”按钮上的路径中选择图像的功能。假设方法 1 是将图像从 RGB 转换为灰度的函数,方法 2 是将 RGB 图像二值化的函数。以下是一些用于构建应用程序的代码。
from tkinter import *
from PIL import Image,ImageTk
from tkinter import filedialog
class application(Tk):
def __init__(self,parent):
Tk.__init__(self,parent)
self.parent = parent
self.minsize(width=500,height=500)
self.initialize()
def initialize(self):
self.grid_columnconfigure(0,weight=1)
self.grid_columnconfigure(1,weight=1)
#Button widgets
###########################################################################################
self.button1 = Button(self,text='Button1',width=10,height=2)
self.button1.grid(column=0,row=0,sticky='W',pady=5)
self.button2 = Button(self,text='Result1',width=10,height=2)
self.button2.grid(column=1,row=3,sticky='E',pady=5)
self.button3 = Button(self,text='Result2',width=10,height=2)
self.button3.grid(column=1,row=4,sticky='E',pady=5)
self.button4 = Button(self,text='Exit',width=10,height=2,command=self.destroy)
self.button4.grid(column=0,row=3,sticky='W',pady=5)
#Text widget for inserting results
############################################################################################
self.text1 = Text(self,height=20,width=60,state=NORMAL)
self.text1.grid(column=1,row=2,sticky='W',padx=5)
#Label widget
############################################################################################
self.label1 = Label(self,text="Window",width=10,height=2,anchor="w")
self.label1.grid(column=1,row=0,sticky='E',padx=5)
if __name__ == "__main__":
app = application(None)
#font.nametofont('TkDefaultFont').configure(size=10)
app.title("John's work")
app.mainloop()
解决方案
tkinter
有一个Toplevel
你可能会觉得有用的类。它很像一个Tk
对象,只是它可以有一个作为父对象。很多人使用Toplevel
弹出窗口之类的东西。在您的情况下,可以定义一个函数来创建一个显示文本的弹出窗口,如下例所示:
from tkinter import *
def create_popup(parent, message):
window = Toplevel(parent)
label = Label(window, text = message)
label.pack()
button = Button(window, text = "Ok", command = window.destroy)
button.pack()
window.mainloop()
root = Tk()
temp = lambda: create_popup(root, "Hello")
button = Button(root, text = "Click me", command = temp)
button.pack()
root.mainloop()
如果您事先使用 确定主窗口的位置和大小Tk.geometry()
,您可以轻松地在您提到的按钮旁边制作弹出窗口。这意味着可以调整上面的代码片段:
from tkinter import *
def create_popup(parent, message, configuration):
window = Toplevel()
window.geometry(configuration)
label = Label(window, text = message)
label.pack()
button = Button(window, text = "Ok", command = window.destroy)
button.pack()
window.mainloop()
root = Tk()
root.geometry("200x200+100+100")
temp = lambda: create_popup(root, "Hello", "50x50+350+100")
button = Button(root, text = "Click me", command = temp)
button.pack()
root.mainloop()
希望这有帮助!
推荐阅读
- ios - Firebase Crashlytics for Swift 上未显示的实际原因
- linux - 如何通过特定的网络接口发送?
- kubernetes - 在 POD 中使用 Service 的 ClusterIP 地址
- ruby - 在 Ruby 块中运行 Execute 资源
- bazel - Bazel 选择在 ctx.file 中失败
- c - 为什么在命令行参数的情况下将命令 char 双指针转换为 char 不起作用?
- python - python - http.server 在 Windows 上工作,但在 debian 上不工作
- http - 使用自己的程序抓取网站时应该使用什么用户代理
- ios - 为什么我不能摆脱 libstdc++?
- php - Laravel 在服务器上运行长任务