2016-04-15 4 views
2

Ich habe im Internet nach einer Lösung gesucht, konnte aber keine finden. Ich versuche, den weißen Bereich um die Handlung auf einer Leinwand zu entfernen, wie im Bild gezeigt, aber ich hatte bisher keinen Erfolg.Wie kann man Leerraum aus dem Tkinter-Canvas eines Pythons entfernen?

Der einfache Code, den ich geschrieben habe, ist:

import tkinter as tk 
import matplotlib 
from matplotlib import style 
style.use('seaborn-darkgrid') 
matplotlib.use("TkAgg") 
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg 
from matplotlib.figure import Figure 
import random 

class GUIplot(tk.Tk): 
    def __init__(self, *args, **kwargs): 
     tk.Tk.__init__(self, *args, **kwargs) 
     printButton = tk.Button(self, text="Plot1", command=lambda: self.printMessage(canvas,a)) 
     printButton.grid(row=0, column=0, sticky='w') 
     f = Figure(figsize=(24,12)) 
     a = f.add_subplot(111, axisbg='r') 
     canvas = FigureCanvasTkAgg(f, self) 
     canvas.get_tk_widget().grid(row=1, columnspan=2) 
     #canvas._tkcanvas.config(bg='blue') 
     canvas.show() 
     canvas.blit()   

    def printMessage(self,canvas,a): 
     a.clear() 
     my_random_x = random.sample(range(100),10) 
     my_random_y = random.sample(range(100),10) 
     a.plot(my_random_x,my_random_y,'*') 
     canvas.draw() 
     print("Wow") 

GUIplot1 = GUIplot() 
GUIplot1.title('PlotFunction') 
w, h = GUIplot1.winfo_screenwidth(), GUIplot1.winfo_screenheight() 
GUIplot1.geometry("%dx%d+0+0" % (w, h)) 
GUIplot1.mainloop() 

Attached Image

Ich würde verlangen, wenn eine der Mitglied in der Gemeinschaft eine Idee hat, wie dieses Problem zu lösen mir zu zuliebe bieten mit etwas Anleitung.

+1

Sie Sizing das Fenster den gesamten Bildschirm aufzunehmen und die Leinwand ist nicht groß genug, um in der Größe des Fensters füllen Sie angegeben haben. Daher ist der zusätzliche Platz mit dem von Ihnen erwähnten "Leerraum" ausgefüllt. – RobertR

+0

@RobertR, danke für die Eingabe. Kannst du mir bitte vorschlagen, wie ich die Größe der Leinwand erhöhen kann, wenn ich 'canvas = FigureCanvasTkAgg (f, self)' 'verwende? –

+0

Wenn Sie es mit dem Aufruf von '.grid (row = 1, columspan = 2) auf den Bildschirm übertragen, versuchen Sie,' sticky = "nswe" 'zum Aufruf hinzuzufügen. Es sollte also aussehen wie '.grid (row = 1, columspan = 2, sticky =" nswe ")'. Ich bin mir nicht ganz sicher, ob das funktionieren wird. Eine bessere Lösung ist, einfach die Größe Ihres Fensters nicht zu vergrößern und es automatisch für Sie zu skalieren. Auf diese Weise passt es die Größe der enthaltenen Widgets (die Leinwand) ohne Leerzeichen. Es sei denn, Sie möchten, dass der Bildschirm in voller Größe angezeigt wird. – RobertR

Antwort

-1

Ich bin nicht in das Geschäft mit der FigureCanvasTkAgg Sache, aber solange es auf dem tk.Canvas basiert sollte diese Arbeit:

In tk.Canvas Sie nur

verwenden
canv=tk.Canvas(master=root, bd=0, highlightthickness=0) 

Versuchen Sie, Fügen Sie dem Aufruf von FigureCanvasTkAgg die folgenden Parameter hinzu: bd, highlightthickness.

Ich hoffe, ich half!

+0

danke für die Antwort. Ich fand, dass die Attribute des Unterplotts geändert werden müssen, um den Leerraum zu entfernen. –

+1

Das ist nicht das Problem. Schau dir das Bild an, das er verlinkt hat. – RobertR

+0

Entschuldigung, mein Fehler. Ich behalte meine Antwort, damit man sie finden kann, wenn man auf tk.Canvas googelt. – pinogun

1

Dieses Stück Code erreicht, was ich gefragt hatte. Dank an alle, die geantwortet:

import tkinter as tk 
import matplotlib 
from matplotlib import style 
style.use('seaborn-darkgrid') 
matplotlib.use("TkAgg") 
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg,  NavigationToolbar2TkAgg 
from matplotlib.figure import Figure 
import random 

class GUIplot(tk.Tk): 
    def __init__(self, *args, **kwargs): 
     tk.Tk.__init__(self, *args, **kwargs) 
     printButton = tk.Button(self, text="Plot1", command=lambda: self.printMessage(canvas,a)) 
     printButton.grid(row=0, column=0, sticky='w') 
     f = Figure() 
     f.subplots_adjust(left=0.03, bottom=0.07, right=0.98, top=0.97, wspace=0, hspace=0) 
     a = f.add_subplot(111, axisbg='r') 
     canvas = FigureCanvasTkAgg(f, self) 
     canvas.get_tk_widget().grid(row=1, columnspan=2) 
     #canvas._tkcanvas.config(bg='blue') 
     canvas.show() 
     canvas.blit()   

    def printMessage(self,canvas,a): 
     a.clear() 
     my_random_x = random.sample(range(100),10) 
     my_random_y = random.sample(range(100),10) 
     a.plot(my_random_x,my_random_y,'*') 
     canvas.draw() 
     print("Wow") 

GUIplot1 = GUIplot() 
GUIplot1.title('PlotFunction') 
w, h = GUIplot1.winfo_screenwidth(), GUIplot1.winfo_screenheight() 
GUIplot1.geometry("%dx%d+0+0" % (w, h)) 
GUIplot1.mainloop() 
Verwandte Themen