Python Forum
[Tkinter] output to canvas widget - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: GUI (https://python-forum.io/forum-10.html)
+--- Thread: [Tkinter] output to canvas widget (/thread-1070.html)



output to canvas widget - freakbot - Dec-01-2016

First post here on this new forum.

I'm trying to get a windows 'dir' command output to display in a canvas widget. Ultimately I want to built an interactive program than will display the output in the canvas widget; this is the first step to get it working.

from Tkinter import *
import subprocess

class window:


   def __init__(self, parent):
       self.frame=Frame(parent)
       self.frame.pack()
       self.gobutton = Button(self.frame, text="Go", command=self.dircall)
       self.gobutton.grid(row=0, column=1)
       self.canvas = Canvas(root, width = 100, height = 100, bg = "white")
       self.canvas.pack()
   def dircall(self):
       output=subprocess.call(["dir", "c:"], shell=True)
       self.canvas.create_text(25, 25, text=output, tags="text")


root = Tk()
root.geometry("200x200")
runit=window(root)
root.mainloop()
When started the GUI opens and then when the button is clicked the output is a 0 and the output from the dir command goes to the run output part of my IDE. I don't get and error, it just doesn't quite do what I want it to.

Any help pointing me to the solution would be appreciated.


RE: output to canvas widget - heiner55 - Dec-01-2016

"0" means that the "dir"-command was processed successfully.
You could use check_output():


       output=subprocess.check_output(["dir", "c:"], shell=True)



RE: output to canvas widget - Larz60+ - Dec-01-2016

I modified a bit, you'll need a bigger Canvas or a smaller font
from Tkinter import *
# import subprocess
import os

class Window:
    def __init__(self, parent):
        self.frame = Frame(parent)
        self.frame.pack()
        self.gobutton = Button(self.frame, text="Go", command=self.dircall)
        self.gobutton.grid(row=0, column=1)
        self.canvas = Canvas(root, width=100, height=100, bg="white")
        self.canvas.pack()

    def dircall(self):
        # output = subprocess.call(["dir", "c:"], shell=True)
        # self.canvas.create_text(25, 25, text=output, tags="text")
        output = os.listdir('C:/')
        x = 5
        y = 10
        for line in output:
            print(line)
            self.canvas.create_text(x, y, text=line, tags='text', anchor='nw')
            y += 10


root = Tk()
root.geometry("200x200")
runit = Window(root)
root.mainloop()