使用 rowspan 在 tkinter 中画布未正确排列

我在 python 中有一些代码,主要使用库 tkinter 进行 Hangman 游戏:


from tkinter import *

from PIL import ImageTk, Image

import time


pause=500


class Graphics(Canvas):


    pics = {

        '1':'backgrounds/step1.png',

        '2':'backgrounds/step2.png',

        '3':'backgrounds/step3.png',

        '4':'backgrounds/step4.png',

        '5':'backgrounds/step5.png',

        '6''backgrounds/step6.png',

        '7':'backgrounds/step7.png',

        '8':'backgrounds/step8.png',

        '9':'backgrounds/step9.png',

        '10':'backgrounds/step10.png',

        '11':'backgrounds/step11.png',

        '12':'backgrounds/step12.png'

    }


    def __init__(self, master):


        self.width=500

        self.height=550


        Canvas.__init__(self, master, bg='saddle brown', width=self.width, height=self.height, highlightthickness=0)


        # self.step = '1'

        # self.createImage(self.step)


    def createImage(self,picName,size=()):

        if size==():

            size=(self.width,self.height)

        filename = self.pics[picName]

        self.im = Image.open(filename)

        self.resizePic(size)

        self.img=ImageTk.PhotoImage(self.im)

        self.pic = self.create_image(self.width/2,self.height/2,anchor=CENTER,\

                                     image=self.img)


    def resizePic(self,size):

        self.im = self.im.resize(size,Image.ANTIALIAS)


    def nextStep(self):

        if self.step=='6':

            self.after(pause, self.master.welcome)

            return

        self.step = str(int(self.step)+1)

        self.delete(self.pic)

        self.createImage(self.step)

        self.after(pause, self.nextStep)


就我的问题而言,不需要图片。无论如何,我希望在停顿 1/2 秒后出现“欢迎”“到”“刽子手”这些词。时机和一切都是正确的。


然而,不是三个画布正确地排列在“棕色矩形”旁边,而是其中一个奇怪地居中在它的右边,另外两个在它下面。为什么会这样?


人到中年有点甜
浏览 165回答 2
2回答

UYOU

这是因为您忘记分配master给Canvas.__init__(...)内部TEXT.__init__()函数。更改如下:class TEXT(Canvas):     def __init__(self, master, width, height, text):         Canvas.__init__(self, bg='black',width=width,height=height,highlightthickness=0)到:class TEXT(Canvas):     def __init__(self, master, width, height, text):         Canvas.__init__(self, master, bg='black',width=width,height=height,highlightthickness=0)

一只甜甜圈

你必须告诉你的框架它将有多少行。改变:class Hangman(Frame):    def __init__(self, master):        Frame.__init__(self, master)        self.grid()到:class Hangman(Frame):    def __init__(self, master):        Frame.__init__(self, master)        self.grid(rowspan=10)原因是网格忽略了空行和空列。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python