Tkinter中水平线的绘制

4 投票
4 回答
17315 浏览
提问于 2025-04-18 00:56

我在用Tkinter画一个8 x 8的网格,现在竖线已经画好了,但横线却总是画不对。

这是我的代码:

from tkinter import *

class CanvasGrid:
def __init__(self):
    self.window = Tk()
    self.window.title("Grid")
    self.canvas = Canvas(self.window, width=128, height=128, bg="white")
    self.canvas.pack()

def displayVertical(self):
    self.canvas.create_line(16, 0, 16, 128, fill="red", tags="line")
    self.canvas.create_line(32, 0, 32, 128, fill="red", tags="line")
    self.canvas.create_line(48, 0, 48, 128, fill="red", tags="line")
    self.canvas.create_line(64, 0, 64, 128, fill="red", tags="line")
    self.canvas.create_line(80, 0, 80, 128, fill="red", tags="line")
    self.canvas.create_line(96, 0, 96, 128, fill="red", tags="line")
    self.canvas.create_line(112, 0, 112, 128, fill="red", tags="line")


def displayHorizontal(self):
    self.canvas.create_line(50, 50, 50, 50, fill="blue", tags="line")

谢谢!

4 个回答

-1

因为 main() 这个函数里没有包含 displayHorizontal(),所以水平线没有显示出来。

0

这一行:

def displayHorizontal(self):
    self.canvas.create_line(50, 50, 50, 50, fill = "blue",
                            tags = "line")

没有长度,它在x和y坐标上都是从50开始到50结束。你可以试试用 0,50,128,50 这个值。

2

因为这段代码在两个方向上是一样的,所以你可以把起始值传给一个函数,这个函数可以根据需要创建一个方向或者两个方向。

class CanvasGrid:
    def __init__(self):
        self.window = Tk()
        self.window.title("Grid")
        self.canvas = Canvas(self.window, width=128,
                            height=128, bg = "white")
        self.display_lines(16, 0, 16, 128, "red")
        self.display_lines(0, 16, 128, 16, "blue")
        self.canvas.pack()

        self.window.mainloop()

    def display_lines(self, x1, y1, x2, y2, color):
        x_plus = x1     ## all lines are evenly spaced
        y_plus = y1
        for ctr in range(7):
            self.canvas.create_line(x1, y1, x2, y2, fill = color)
            x1 += x_plus
            x2 += x_plus
            y1 += y_plus
            y2 += y_plus

CG = CanvasGrid()
3

50 50 50 50 是一个点,不是一条线,所以你看不到它。

信息:

canvas.create_line(startx, starty, endx, endy __then other args__)

尝试

canvas.create_line(0,50,widthofwindow,50

撰写回答