如何从菜单栏中选择在文本框中显示特定文本

Posted

技术标签:

【中文标题】如何从菜单栏中选择在文本框中显示特定文本【英文标题】:How do I show a specific text in a textbox by choise from a menu bar 【发布时间】:2017-09-08 18:46:11 【问题描述】:

我创建了一个菜单栏和一个文本框,我希望在文本框中显示属于在菜单中所做选择的变量中的信息。

但我不知道怎么做。

这是我通过网络上的不同指南整理出来的。我对 python 很陌生,我仍然在为对象和类的概念而苦苦挣扎,所以任何帮助都会得到很大的帮助。

from tkinter import Tk, Frame, Menu
from tkinter import *

class Example(Frame):
  def __init__(self):
    super().__init__()   
    self.initUI()

  def initUI(self):
    self.master.title("syntax explenation for shopfloor")

    menubar = Menu(self.master)
    self.master.config(menu=menubar)

    syntaxMenu = Menu(menubar, tearoff=False)       
    submenu = Menu(syntaxMenu)
    syntaxMenu.add_cascade(label='Math', menu=submenu, underline=0)
    submenu.add_command(label="abs()", command=self.onSyntaxabs)
    submenu.add_command(label="cos()", command=self.onSyntaxcos)
    submenu.add_command(label="sin()", command=self.onSyntaxsin)
    submenu.add_cascade(label="log()", command=self.onSyntaxlog)
    submenu = Menu(syntaxMenu)
    syntaxMenu.add_cascade(label='Inqurie', menu=submenu, underline=0)
    submenu.add_command(label="inqiureText()", command=self.onSyntaxinquire)

    menubar.add_cascade(label="Syntax", underline=0, menu=syntaxMenu)

  def onSyntaxabs():
    info="Convert to absolute value, abs(-10) will respond with 10."
  def onSyntaxcos():
    info="Returns cosinus value in decimal degrees"
  def onSyntaxcos():
    info="Returns cosinus value in decimal degrees"
  def onSyntaxlog():
    info="Returns the natural logarithm"
  def onSyntaxinquire():
    info="Creates a pop-up box that you can enter text in."


def main():

root = Tk()
root.geometry("500x600")
app = Example() 
S = Scrollbar(root)
T = Text(root, height=20, width=60, bg="lightblue")
S.pack(side=RIGHT, fill=Y)
T.pack(side=LEFT, fill=BOTH)
T.pack(side=RIGHT, fill=BOTH)
S.config(command=T.yview)
T.config(yscrollcommand=S.set)
info=?
T.insert(END, info)
mainloop(  )

if __name__ == '__main__':
main() 

【问题讨论】:

你的代码有很多问题。你需要修正你的缩进。您无缘无故地从 tkinter 导入了两次。 info=? 不是一个有效的陈述我想你的意思是info="?"。您已经定义了两次def onSyntaxcos():,依此类推。 您首先需要了解 Python 中的class 是什么。然后你可以继续学习关于tkinter的教程。 您可能会受益于使用可以为您检查错误的良好 IDE,这样您就可以避免缩进和缺少引号等简单问题。也许像 Eclipse 或 Py Charm。 【参考方案1】:

这里有一点推进:

from tkinter import Tk, Frame, Menu, Scrollbar, Text
from tkinter import RIGHT, LEFT, BOTH, END, Y
from tkinter import StringVar

class Example(Frame):
    def __init__(self, master):
        super().__init__(master)
        self.pack(fill=BOTH, expand=True)
        self.initUI()

    def initUI(self):
        self.master.title("syntax explenation for shopfloor")

        menubar = Menu(self.master)
        self.master.config(menu=menubar)

        syntaxMenu = Menu(menubar, tearoff=False)
        submenu = Menu(syntaxMenu)
        syntaxMenu.add_cascade(label='Math', menu=submenu, underline=0)
        submenu.add_command(label="abs()", command=self.onSyntaxabs)
        submenu.add_command(label="cos()", command=self.onSyntaxcos)
        submenu.add_command(label="sin()", command=self.onSyntaxsin)
        submenu.add_cascade(label="log()", command=self.onSyntaxlog)
        submenu = Menu(syntaxMenu)
        syntaxMenu.add_cascade(label='Inqurie', menu=submenu, underline=0)
        submenu.add_command(label="inqiureText()", command=self.onSyntaxinquire)

        menubar.add_cascade(label="Syntax", underline=0, menu=syntaxMenu)


        S = Scrollbar(self)                             # Should probably be an instance member as well
        self.text = Text(self, height=20, width=60, bg="lightblue")
        S.pack(side=RIGHT, fill=Y)
        self.text.pack(side=LEFT, fill=BOTH)
        self.text.pack(side=RIGHT, fill=BOTH)
        S.config(command=self.text.yview)
        self.text.config(yscrollcommand=S.set)

        self.setText("?")

    def setText(self, text):
        self.text.delete(1.0,END)
        self.text.insert(END, text)


    def onSyntaxabs(self):
        self.setText("Convert to absolute value, abs(-10) will respond with 10.")

    def onSyntaxsin(self):
        self.setText("Returns sinus value in decimal degrees")

    def onSyntaxcos(self):
        self.setText("Returns cosinus value in decimal degrees")

    def onSyntaxlog(self):
        self.setText("Returns the natural logarithm")

    def onSyntaxinquire(self):
        self.setText("Creates a pop-up box that you can enter text in.")


def main():
    root = Tk()
    root.geometry("500x600")
    app = Example(master=root)
    app.mainloop()

if __name__ == '__main__':
    main()

一般来说,我会尽量避免导入所有这些符号,而只是做类似

import tkinter as tk

那么在你写FrameRIGHT 的地方你会使用tk.Frametk.RIGHT

另外,我将您所有的小部件创建移到了班级内。因此,现在您的 Text 小部件是一个类成员 (self.text),并且可以从类中轻松访问和控制 - 您的所有 onSyntax___ 方法调用 setText(另一个类方法),它设置了 Text 小部件的内容。

希望对你有帮助。

【讨论】:

最好导入为tk。从同一个库接缝的多行导入对我来说是不好的做法。对于这么多的导入,我认为使用tk 会更好 @SierraMountainTech 我同意 - 我希望我在代码下的注释不会令人困惑。不是因为我使用了三行导入,而是因为要导入大量的全局变量,其中许多是常见的 (Y),如果它们被重新定义了。 是的。我想这些导入很好地可视化了 tkinter 实际使用的内容。【参考方案2】:

感谢大家的意见。

我将继续与您的职位 jedward 合作。 我将研究 Eclipse 和 Py Charm,因为我真的需要这样的东西。

【讨论】:

以上是关于如何从菜单栏中选择在文本框中显示特定文本的主要内容,如果未能解决你的问题,请参考以下文章

获取特定任务栏按钮的上下文菜单文本

在菜单栏中显示静态文本

winform文本框超出

GWT 菜单栏中的图像而不是文本

重新加载页面后如何突出显示导航栏中的活动菜单项

Excel中设置下拉菜单并填充不同颜色