Python Tkinter Canvas不会出现

时间:2017-05-07 15:40:12

标签: python tkinter tkinter-canvas

你好我在python上使用Tkinter包有问题。我想创建一个包含两个主要小部件的窗口,其中一个是一个画布,稍后将显示带有单元格的网格。初始化画布时,我使用" create_rectangle"用所需对象填充画布。此外,当单击一个单元格(出于测试原因)时,画布应该在矩形区域中更改其颜色。然而,当首先初始显示窗口时,不能看到任何对象(预期结果将只是白色矩形),并且仅当执行对画布的单击时,该区域根据需要改变其颜色。 在浏览互联网时,我尝试了pack() - 和create_rectangle() - 方法的几种变体。这是代码:

public ActionResult Index()
{
    var genres = new List<Genre>
    {
       new Genre { Name = "Disco" },
       new Genre { Name = "Jazz" },
       new Genre { Name = "Rock" }
    };
    return View();
}

1 个答案:

答案 0 :(得分:0)

问题1

您的主要问题是,在实际显示画布之前,canvas.winfo_width()canvas.winfo_height()不会返回画布的宽度和高度,而是返回值1

我建议您按如下方式创建画布:

# Define canvas and save dimensions
self.canvas_width = 300
self.canvas_height = 200
self.canvas = Canvas(self, width = self.canvas_width, 
                           height = self.canvas_height)

然后,在您的代码中,替换每个实例:

width, height = self.canvas.winfo_width(), self.canvas.winfo_height()

width, height = self.canvas_width, self.canvas_height

问题2:

创建每个单元格时,我认为您不需要向x0y0添加1。相反,它应该是:

x0 = width * x / self.grid.width
x1 = width * (x + 1) / self.grid.width
y0 = height * y / self.grid.height
y1 = height * (y + 1) / self.grid.height