該当のソースコード:
python
1import sys 2import pygame 3from pygame.locals import QUIT, MOUSEBUTTONDOWN 4 5pygame.init() 6window = pygame.display.set_mode((300, 400)) 7pygame.display.set_caption("計算機") 8 9 10def main(): 11 font = pygame.font.SysFont(None, 75) 12 a = font.render("1", True, (255, 255, 255)) 13 b = font.render("2", True, (255, 255, 255)) 14 c = font.render("3", True, (255, 255, 255)) 15 d = font.render("+", True, (255, 255, 255)) 16 e = font.render("4", True, (255, 255, 255)) 17 f = font.render("5", True, (255, 255, 255)) 18 g = font.render("6", True, (255, 255, 255)) 19 h = font.render("-", True, (255, 255, 255)) 20 i = font.render("7", True, (255, 255, 255)) 21 j = font.render("8", True, (255, 255, 255)) 22 k = font.render("9", True, (255, 255, 255)) 23 l = font.render("×", True, (255, 255, 255)) 24 m = font.render("0", True, (255, 255, 255)) 25 n = font.render("00", True, (255, 255, 255)) 26 o = font.render("=", True, (255, 255, 255)) 27 p = font.render("÷", True, (255, 255, 255)) 28 29 a_rect = a.get_rect() 30 b_rect = b.get_rect() 31 c_rect = c.get_rect() 32 d_rect = d.get_rect() 33 e_rect = e.get_rect() 34 f_rect = f.get_rect() 35 g_rect = g.get_rect() 36 h_rect = h.get_rect() 37 i_rect = i.get_rect() 38 j_rect = j.get_rect() 39 k_rect = k.get_rect() 40 l_rect = l.get_rect() 41 m_rect = m.get_rect() 42 n_rect = n.get_rect() 43 o_rect = o.get_rect() 44 p_rect = p.get_rect() 45 46 a_rect.center = (0 + 37, 100 + 37) 47 b_rect.center = (75 + 37, 100 + 37) 48 c_rect.center = (150 + 37, 100 + 37) 49 d_rect.center = (225 + 37, 100 + 37) 50 e_rect.center = (0 + 37, 175 + 37) 51 f_rect.center = (75 + 37, 175 + 37) 52 g_rect.center = (150 + 37, 175 + 37) 53 h_rect.center = (225 + 37, 175 + 37) 54 i_rect.center = (0 + 37, 250 + 37) 55 j_rect.center = (75 + 37, 250 + 37) 56 k_rect.center = (150 + 37, 250 + 37) 57 l_rect.center = (225 + 37, 250 + 37) 58 m_rect.center = (0 + 37, 325 + 37) 59 n_rect.center = (75 + 37, 325 + 37) 60 o_rect.center = (150 + 37, 325 + 37) 61 p_rect.center = (225 + 37, 325 + 37) 62 mousepos = [] 63 kekka = [] 64 65 while True: 66 window.fill((0, 0, 0)) 67 for event in pygame.event.get(): 68 if event.type == QUIT: 69 pygame.quit() 70 sys.exit() 71 elif event.type == MOUSEBUTTONDOWN: 72 mousepos.append(event.pos) 73 74 for lenx in range(0, 300, 75): 75 pygame.draw.line(window, (255, 255, 255), (lenx - 1, 100), (lenx, 400)) 76 for leny in range(100, 400, 75): 77 pygame.draw.line(window, (255, 255, 255), (0, leny), (300, leny)) 78 79 window.blit(a, a_rect) 80 window.blit(b, b_rect) 81 window.blit(c, c_rect) 82 window.blit(d, d_rect) 83 window.blit(e, e_rect) 84 window.blit(f, f_rect) 85 window.blit(g, g_rect) 86 window.blit(h, h_rect) 87 window.blit(i, i_rect) 88 window.blit(j, j_rect) 89 window.blit(k, k_rect) 90 window.blit(l, l_rect) 91 window.blit(m, m_rect) 92 window.blit(n, n_rect) 93 window.blit(o, o_rect) 94 window.blit(p, p_rect) # 95 96 for x, y in mousepos: 97 if 0 <= x <= 75 and 100 <= y <= 175: 98 kekka.append('1') 99 elif 75 <= x <= 150 and 100 <= y <= 175: 100 kekka.append('2') 101 elif 150 <= x <= 225 and 100 <= y <= 175: 102 kekka.append('3') 103 elif 0 <= x <= 75 and 175 <= y <= 250: 104 kekka.append('4') 105 elif 75 <= x <= 150 and 175 <= y <= 250: 106 kekka.append('5') 107 elif 150 <= x <= 225 and 175 <= y <= 250: 108 kekka.append('6') 109 elif 0 <= x <= 75 and 250 <= y <= 325: 110 kekka.append('7') 111 elif 75 <= x <= 150 and 250 <= y <= 325: 112 kekka.append('8') 113 elif 150 <= x <= 225 and 250 <= y <= 325: 114 kekka.append('9') 115 elif 0 <= x <= 75 and 325 <= y <= 400: 116 kekka.append('0') 117 elif 75 <= x <= 150 and 325 <= y <= 400: 118 kekka.append('00') 119 q="" 120 for kekkaretu in kekka: 121 q+=kekkaretu 122 kekkamessage = font.render(q, True, (255, 255, 255)) 123 kekkamessage_rect=kekkamessage.get_rect() 124 kekkamessage_rect.bottomright=(300,100) 125 window.blit(kekkamessage,kekkamessage_rect) 126 127 pygame.display.update() 128 129 130if __name__ == '__main__': 131 main()
やりたいこと:画面に表示された数字を押すとその数字が計算機のように表示されるようにしたいです
エラー:エラーではないのですが、同じ数字が永遠に表示されます
やってみたこと1:該当の箇所
python
1q="" 2for kekkaretu in kekka: 3 q+=kekkaretu 4 kekkamessage = font.render(q, True, (255, 255, 255)) 5 kekkamessage_rect=kekkamessage.get_rect() 6 kekkamessage_rect.bottomright=(300,100) 7 window.blit(kekkamessage,kekkamessage_rect) 8
をwhile分の外に出してみました
結果:何も表示されなかったです
やってみたこと2:
python
1q="" 2for kekkaretu in kekka: 3 q+=kekkaretu 4 kekkamessage = font.render(q, True, (255, 255, 255)) 5 kekkamessage_rect=kekkamessage.get_rect() 6 kekkamessage_rect.bottomright=(300,100) 7 window.blit(kekkamessage,kekkamessage_rect)
この後ろに
python
1if len(q)==1: 2 break
を入れてみました
結果:1回目のクリックでは数字一つだけ表示されるのですが、2回目はひょうじされませんでした。
どなたかクリックした数字が電卓のように増えていくようなアルゴリズムを教えてください。
回答2件
あなたの回答
tips
プレビュー