【问题标题】:Print Result to Canvas Not to the shell window将结果打印到画布而不是外壳窗口
【发布时间】:2017-10-28 14:41:23
【问题描述】:

附加是我在 Tkinter 中使用画布构建的 GUI 的一部分,因此可以在背景中插入图像。 当我调用函数 Relay_1: 结果被发送到 Python shell 窗口。 我想要的是画布中的文本框,并在画布上而不是在外壳中显示结果(即打印结果)。 任何想法将不胜感激。

import Tkinter

#Function 
def Relay_1():
 arduinoData.write(b'1')
 print ("This is a test\n")   

class ProgramGUI:
def __init__(self):

    # Creates the Main window for the program        
    self.main = tkinter.Tk()

   # Change Default ICON

    self.main.iconbitmap(self,default = 'test.ico')        

   # Create title, window size and make it a non re sizable window       
    self.main.title('Test')
    self.main.resizable(False, False)                 
    self.main.geometry('680x300')       

    self.canvas = tkinter.Canvas(self.main, width = 680, height = 300)
    self.canvas.pack()

    self.logo = tkinter.PhotoImage(file = 'test.png')
    self.canvas.create_image(0,0,image = self.logo, anchor = 'nw')

    # Create 3 Frame to group the widgets        
    self.top = tkinter.Frame(self.main)
    self.middle = tkinter.Frame(self.main)                
    self.bottom = tkinter.Frame(self.main)

等等等等

【问题讨论】:

  • 我设置了一行代码如下

标签: python-3.x tkinter


【解决方案1】:

tkinter 画布小部件有一个非常简单易用的方法来绘制文本,称为create_text()。你可以这样使用,

self.canvas.create_text(10, 10, text='This is a test\n')

可以通过传递各种参数来自定义文本,包括fontfilljustify。在此处查看可传递参数的完整列表:http://effbot.org/tkinterbook/canvas.htm#Tkinter.Canvas.create_text-method

要在代码执行时添加文本,您可以在ProgramGUI() 方法中创建一个类:

def draw_text(self, text):
    self.canvas.create_text(10, 10, text=text)

并在创建对象后使用它。

【讨论】:

  • 感谢文本画布代码 - 效果很好! - 下一步是,当函数执行时,我如何知道将 say "This is a test" 的打印值传递给 text 参数?
  • 谢谢 - 是一个传递参数的函数。当我调用函数 def Relay_1(): arduinoData.write(b'1') draw_text('This is a Test') 时,我将参数“这是一个测试”传递给您建议的函数,即 def draw_text(self, text): self.canvas.create_text(10, 10, text=(text)) - 我遇到的问题是我收到错误 - draw_text() 缺少 1 个必需的位置参数:'text',我在调用你的函数吗错了吗?
  • 我曾建议您将函数放在类中。但是,如果要放在外面,则需要将 gui 对象作为参数传递给Relay_1()。比如:Relay_1(app_object, text): app_object.draw_text(10, 10, text=text)。应该这样做
  • 我按照您的建议将函数放在课堂上,并将我的 Relay_1 函数移到课堂上,效果很好!!! - 如果您知道每次调用该函数时如何清除文本框中的文本,请告诉我(非常感谢),否则我将标记为完成。
  • 不确定。但也许你应该看看这个:stackoverflow.com/questions/28840882/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-22
  • 2020-06-24
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多