質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

画像が表示されるframeと表示されないframeがある

takatoyo
takatoyo

総合スコア13

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0評価

1クリップ

205閲覧

投稿2022/01/19 08:46

前提・実現したいこと

麻雀のルールを説明するアプリをTkinterで制作しています。

発生している問題・エラーメッセージ

麻雀牌の画像を表示して説明を行いたいのですがtile_frame7のみ画像が表示され、tile_frame1~tile_frame6まで画像がcanvasに表示されません。
tile_frame1~tile_frame6とtile_frame7のソースを比較しましたが、特に違いが無くエラーメッセージも表示されないのでなぜなのかわかりません。
別のプログラムで試したところ画像は問題なく表示されたので参照ミスではないと思います。
ご教授お願い致します。

該当のソースコード

Python

import numpy as np import cv2 import PIL.Image,PIL.ImageTk import tkinter as tk from pickle import TRUE from mahjong import agari, constants, shanten, tile from mahjong.hand_calculating import hand, hand_config import fire import copy from tkinter import Canvas ##### PATH設定 MAHJONG_TILES_PATH = 'C:\\university\\guraduation research\\pai_images\\' # 麻雀牌画像パス PATH_DELIMITER = '\\' ### 定数定義 Mahjong_tiles_types = ['ji1','ji2','ji3','ji4','ji5','ji6','ji7','ji1y','ji2y','ji3y','ji4y','ji5y','ji6y','ji7y', 'man1','man2','man3','man4','man5','man6','man7','man8','man9','man1y','man2y','man3y','man4y','man5y','man6y','man7y','man8y','man9y', 'pin1','pin2','pin3','pin4','pin5','pin6','pin7','pin8','pin9','pin1y','pin2y','pin3y','pin4y','pin5y','pin6y','pin7y','pin8y','pin9y', 'sou1','sou2','sou3','sou4','sou5','sou6','sou7','sou8','sou9','sou1y','sou2y','sou3y','sou4y','sou5y','sou6y','sou7y','sou8y','sou9y','yohaku'] tile_images = {} for mj_tile in Mahjong_tiles_types: tile_images[mj_tile] = cv2.imread(MAHJONG_TILES_PATH + mj_tile + '.png', cv2.IMREAD_COLOR) tehai = cv2.hconcat([tile_images['man1'],tile_images['man2'],tile_images['man3'],tile_images['pin4'],tile_images['pin5'],tile_images['pin6'],tile_images['sou1'],tile_images['sou1'],tile_images['sou7'],tile_images['sou8'],tile_images['sou9'],tile_images['ji1'],tile_images['ji1'],tile_images['ji1'],]) ji_tiles = cv2.hconcat([tile_images['ji1'],tile_images['ji2'],tile_images['ji3'],tile_images['ji4'],tile_images['ji5'],tile_images['ji6'],tile_images['ji7'],tile_images['yohaku'],tile_images['yohaku']]) man_tiles = cv2.hconcat([tile_images['man1'],tile_images['man2'],tile_images['man3'],tile_images['man4'],tile_images['man5'],tile_images['man6'],tile_images['man7'],tile_images['man8'],tile_images['man9']]) pin_tiles = cv2.hconcat([tile_images['pin1'],tile_images['pin2'],tile_images['pin3'],tile_images['pin4'],tile_images['pin5'],tile_images['pin6'],tile_images['pin7'],tile_images['pin8'],tile_images['pin9']]) sou_tiles = cv2.hconcat([tile_images['sou1'],tile_images['sou2'],tile_images['sou3'],tile_images['sou4'],tile_images['sou5'],tile_images['sou6'],tile_images['sou7'],tile_images['sou8'],tile_images['sou9']]) suuhai = cv2.vconcat([man_tiles,pin_tiles,sou_tiles]) mahjong_tiles = cv2.vconcat([ji_tiles,man_tiles,pin_tiles,sou_tiles]) ji_tiles = cv2.hconcat([tile_images['ji1'],tile_images['ji2'],tile_images['ji3'],tile_images['ji4'],tile_images['ji5'],tile_images['ji6'],tile_images['ji7']]) chunchanpai_man = cv2.hconcat([tile_images["man2"],tile_images["man3"],tile_images["man4"],tile_images["man5"],tile_images["man6"],tile_images["man7"],tile_images["man8"]]) chunchanpai_pin = cv2.hconcat([tile_images["pin2"],tile_images["pin3"],tile_images["pin4"],tile_images["pin5"],tile_images["pin6"],tile_images["pin7"],tile_images["pin8"]]) chunchanpai_sou = cv2.hconcat([tile_images["sou2"],tile_images["sou3"],tile_images["sou4"],tile_images["sou5"],tile_images["sou6"],tile_images["sou7"],tile_images["sou8"]]) chunchanpai = cv2.vconcat([chunchanpai_man,chunchanpai_pin,chunchanpai_sou]) OPT_RULES = hand_config.OptionalRules(has_open_tanyao=True) WIND_STR2CONST = {"EAST": constants.EAST, "SOUTH": constants.SOUTH, "WEST": constants.WEST, "NORTH": constants.NORTH} WIND_STR2CHARA = {"EAST": "東", "SOUTH": "南", "WEST": "西", "NORTH": "北"} #ホーム def home(): home_frame.tkraise() #入門者編ホーム def title_btn1_click(): intro_frame.tkraise() #麻雀牌の種類① def tile_btn1_click(): tile_frame1.tkraise() #麻雀牌の種類② def tile_btn2_click(): tile_frame2.tkraise() #麻雀牌の種類③ def tile_btn3_click(): tile_frame3.tkraise() #麻雀牌の種類④ def tile_btn4_click(): tile_frame4.tkraise() #麻雀牌の種類⑤ def tile_btn5_click(): tile_frame5.tkraise() #麻雀牌の種類⑥ def tile_btn6_click(): tile_frame6.tkraise() #麻雀牌の種類⑦ def tile_btn7_click(): tile_frame7.tkraise() #ホーム root = tk.Tk() root.title('麻雀初心者支援ツール') root.geometry('1200x700') #*ではなく小文字のxで記述 root.grid_rowconfigure(0,weight=1) root.grid_columnconfigure(0,weight=1) home_frame = tk.Frame(root) home_frame.grid(row=0, column=0, sticky="nsew") title_btn1 = tk.Button(home_frame, width=80,height=10,font=('MSゴシック','15','bold'),text = 'ルールがわからない人向け',anchor=tk.CENTER,command=title_btn1_click) title_btn1.pack(fill = 'x', padx=100) #入門者編ホーム intro_frame = tk.Frame(root) root.title('ルールを知らない人向け(入門編)') intro_frame.grid(row=0, column=0, sticky="nsew") intro_frame.label = tk.Label(intro_frame,font=('MSゴシック','20','bold'), text='このステップは麻雀のルールを全く知らない人向けです\nまずは麻雀の基本から学びましょう') intro_frame.label.pack() intro_titlebtn1 = tk.Button(intro_frame, text="①麻雀牌の種類", height=10, width=80, command=tile_btn1_click) intro_titlebtn1.pack() #麻雀牌の種類① tile_frame1 = tk.Frame(root) tile_frame1.grid(row=0, column=0, sticky="nsew") tile_frame1.label = tk.Label(tile_frame1,font=('MSゴシック','20','bold'), text='まず麻雀に使用する道具に「牌(パイ、ハイ)」と呼ばれるものがあります\nこれは27種の数牌(すうはい、かずはい)と7種の字牌(じはい)から成り、\n1種類につき4個存在するので使用する総数は34種×4枚=136枚となります') tile_frame1.label.place(x=80,y=100) canvas = tk.Canvas(tile_frame1,bg="green") canvas.pack(expand=True,fill=tk.X) image = PIL.ImageTk.PhotoImage(image=PIL.Image.fromarray(mahjong_tiles)) canvas.create_image(500,100,image=image) tile_btn2 = tk.Button(tile_frame1,text="次へ", width=8, command=tile_btn2_click) tile_btn2.place(x=1100,y=300) tile_frame1.update() #麻雀牌の種類② tile_frame2 = tk.Frame(root) tile_frame2.grid(row=0, column=0, sticky="nsew") tile_frame2.label = tk.Label(tile_frame2,font=("MSゴシック","20","bold"),text="麻雀はこの136枚の牌から14枚の牌を手牌とし、\n特定の形に揃えてアガリを目指すゲームです") tile_frame2.label.place(x=300,y=100) canvas = tk.Canvas(tile_frame2,bg="green") canvas.pack(expand=True,fill=tk.X) canvas.create_image(500,100,image=image) tile_btn3 = tk.Button(tile_frame2,text="次へ", width=8, command=tile_btn3_click) tile_btn3.place(x=1100,y=300) tile_frame2.update() #麻雀牌の種類③ tile_frame3 = tk.Frame(root) tile_frame3.grid(row=0, column=0, sticky="nsew") tile_frame3.label = tk.Label(tile_frame3,font=("MSゴシック","20","bold"),text="数牌は漢数字で数字が描かれた萬子(マンズ)\n丸の数で数字を表す筒子(ピンズ)\n竹のようなマークの数で数字を表す索子(ソーズ)\nの3種類があります\nトランプのハートやダイヤのようなものです") tile_frame3.label.place(x=250,y=50) canvas = tk.Canvas(tile_frame3,bg="green") canvas.pack(expand=True,fill=tk.X) suuhai = cv2.vconcat([man_tiles,pin_tiles,sou_tiles]) image = PIL.ImageTk.PhotoImage(image=PIL.Image.fromarray(suuhai)) canvas.create_image(500,100,image=image) tile_btn4 = tk.Button(tile_frame3,text="次へ",width=8,command=tile_btn4_click) tile_btn4.place(x=1100,y=300) tile_frame3.update() #麻雀牌の種類④ tile_frame4 = tk.Frame(root) tile_frame4.grid(row=0, column=0, sticky="nsew") tile_frame4.label = tk.Label(tile_frame4,font=("MSゴシック","20","bold"),text="数牌は中国語の1~9と萬(マン)、筒(ピン)、索(ソー)を合わせて呼びます\n例えば萬子の5であれば5(ウー)と萬(マン)を合わせて五萬(ウーマン)と呼びます\n始めたばかりの時は呼び方はそれほど重要ではありません\n「漢数字の4」や「竹の6」など、自分の覚えやすい呼び方で大丈夫です") tile_frame4.label.place(x=100,y=50) canvas = tk.Canvas(tile_frame4,bg="green") canvas.pack(expand=True,fill=tk.X) suuhai = cv2.vconcat([man_tiles,pin_tiles,sou_tiles]) image = PIL.ImageTk.PhotoImage(image=PIL.Image.fromarray(suuhai)) canvas.create_image(500,100,image=image) tile_btn5 = tk.Button(tile_frame4,text="次へ",width=8,command=tile_btn5_click) tile_btn5.place(x=1100,y=300) tile_frame4.update() #麻雀牌の種類⑤ tile_frame5 = tk.Frame(root) tile_frame5.grid(row=0, column=0, sticky="nsew") tile_frame5.label = tk.Label(tile_frame5,font=("MSゴシック","20","bold"),text="字牌には東南西北の4つからなる風牌と白發中の3つからなる三元牌があります\n風牌は順番に東(トン)、南(ナン)、西(シャー)、北(ペイ)と読みます\n三元牌は順番に白(ハク)、發(ハツ)、中(チュン)と読みます") tile_frame5.label.place(x=100,y=50) canvas = tk.Canvas(tile_frame5,bg="green") canvas.pack(expand=True,fill=tk.X) image = PIL.ImageTk.PhotoImage(image=PIL.Image.fromarray(ji_tiles)) canvas.create_image(500,100,image=image) tile_btn6 = tk.Button(tile_frame5,text="次へ",width=8,command=tile_btn6_click) tile_btn6.place(x=1100,y=300) tile_frame5.update() #麻雀牌の種類⑥ tile_frame6 = tk.Frame(root) tile_frame6.grid(row=0, column=0, sticky="nsew") tile_frame6.label = tk.Label(tile_frame6,font=("MSゴシック","20","bold"),text="日本とは違い、麻雀における方角の順番は東→南→西→北です\nまた三元牌の順番も白→發→中です\n後に登場する「ドラ」の理解に必要なので間違えないようにしましょう") tile_frame6.label.place(x=150,y=50) canvas = tk.Canvas(tile_frame6,bg="green") canvas.pack(expand=True,fill=tk.X) image = PIL.ImageTk.PhotoImage(image=PIL.Image.fromarray(ji_tiles)) canvas.create_image(500,100,image=image) tile_btn7 = tk.Button(tile_frame6,text="次へ",width=8,command=tile_btn7_click) tile_btn7.place(x=1100,y=300) tile_frame6.update() #麻雀牌の種類⑦ tile_frame7 = tk.Frame(root) tile_frame7.grid(row=0, column=0, sticky="nsew") tile_frame7.label = tk.Label(tile_frame7,font=("MSゴシック","20","bold"),text="以上の34種の牌を使って麻雀はプレイされます\n次からは何をすればアガリになるのかを見ていきます") tile_frame7.label.place(x=250,y=50) canvas = tk.Canvas(tile_frame7,bg="green") canvas.pack(expand=True,fill=tk.X) image = PIL.ImageTk.PhotoImage(image=PIL.Image.fromarray(mahjong_tiles)) canvas.create_image(500,100,image=image) home_btn = tk.Button(tile_frame7,text="ホーム",width=8,command=home) home_btn.place(x=1100,y=300) tile_frame7.update() home() root.mainloop()

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。