алгоритм написания ткинтера - PullRequest
0 голосов
/ 20 февраля 2020

Я пишу алгоритм, который обеспечивает вывод программы tkinter (надеюсь, я объяснил сам), программа работает путем перетаскивания комбинированного списка, текста ... в пространство и запоминания координат. Я решил сделать это с помощью pygame (я взял скелет программы из inte rnet, а затем изменил его). У меня возникло несколько проблем:

  • У меня проблема со вставкой нескольких изображений (на данный момент я вставил только одно),
  • Я не могу запомнить координаты, я пробовал с печатью (событие), но это не работает,
  • Я не могу вставить изображение в указанную c точку root.

вот мой код:

import os,sys
import pygame as pg
pg.init()
a=0
b=0
c=200
d=200
event = pg.event.poll()
Sfondo = pg.image.load("Sfondo.jpg")


def DisegnaBackground (a,b):
    Screen.blit(Sfondo,(a,b))


class Character:

    def __init__(self,rect):
        self.rect = pg.Rect(rect)
        self.click = False
        self.image = pg.image.load("ComboBox.png").convert()
        Screen.blit(self.image, (c,d))

    def update(self,surface):
        if self.click:
            self.rect.center = pg.mouse.get_pos()
        surface.blit(self.image,self.rect)


def main(Surface,Player):
    game_event_loop(Player)
    DisegnaBackground (a,b)
    Player.update(Surface)


def game_event_loop(Player):
    for event in pg.event.get():
        if event.type == pg.MOUSEBUTTONDOWN:
            if Player.rect.collidepoint(event.pos):
                Player.click = True
        elif event.type == pg.MOUSEBUTTONUP:
            Player.click = False
        elif event.type == pg.QUIT:
            pg.quit(); sys.exit()


if __name__ == "__main__":

    os.environ['SDL_VIDEO_CENTERED'] = '1'
    pg.init()
    Screen = pg.display.set_mode((1500,800))
    MyClock = pg.time.Clock()
    MyPlayer = Character((0,0,200,24))
    MyPlayer.rect.center = Screen.get_rect().center
    while 1:
        main(Screen,MyPlayer)
        pg.display.update()
        MyClock.tick(60)

        print(event)

1 Ответ

2 голосов
/ 20 февраля 2020

Есть ряд проблем. Во-первых, постарайтесь не смешивать глобальные и локальные переменные. Попробуйте переписать эту функцию следующим образом:

def DisegnaBackground (surface, a, b):
    surface.blit(Sfondo, (a, b))

Для того, чтобы это работало, вы также должны обновить свой основной:

def main(Surface,Player):
    game_event_loop(Player)
    DisegnaBackground (Surface, a, b)
    Player.update(Surface)

Наконец, вам не нужно отображать вашего персонажа сразу после создания, так что вы можете оставить функцию инициализации как

    def __init__(self,rect):
        self.rect = pg.Rect(rect)
        self.click = False
        self.image = pg.image.load("ComboBox.png").convert()

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...