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

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

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

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

解決済

Pythonで作ったカレンダーのボタンを押すと他のPythonファイルを開く

Himasin
Himasin

総合スコア1

Python

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

1回答

0グッド

0クリップ

307閲覧

投稿2022/11/28 08:46

編集2022/11/29 07:14
コード import sys import tkinter as tk1 import datetime as dt1 import calendar as cl1 def generate_calendar1(y1, m1): global wd1 global cal1 for i1 in range( len(cal1) ): cal1[i1] = "" date1 = dt1.date( y1, m1, 1 ) wd1 = date1.weekday() if wd1 > 5: wd1 = wd1 - 7 cal_max1 = cl1.monthrange( y1, m1 )[1] for i1 in range( cal_max1 ): str1 = str( i1+1 ) i2 = i1 + wd1 + 1 cal1[i2] = str1 def set_calendar1(cal1, btn1): for i1 in range( len(cal1) ): str1 = cal1[i1] btn1[i1]["text"] = str1 def prev_next1( n1 ): global y1 global m1 global btn1 m2 = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ] m1 = m1 + n1 if m1 > 12: y1 = y1 + 1 m1 = 1 elif m1 < 1: y1 = y1 - 1 m1 = 12 label1["text"] = str(m1) label2["text"] = m2[m1-1] label3["text"] = str(y1) generate_calendar1(y1, m1) set_calendar1(cal1, btn1) def btn_click1(): return root = tk1.Tk() root.title(u"iroha_calendar v0.1") root.geometry("755x530+100+100") root["bg"] = "#EEEEE8" label1 = tk1.Label(font=("Meiryo UI",26),anchor=tk1.CENTER, width=2) label1["bg"] = "#EEEEE8" label1.place(x=50, y=3) label2 = tk1.Label(font=("Meiryo UI",10),anchor=tk1.W, width=10) label2["bg"] = "#EEEEE5" label2.place(x=120, y=8) label3 = tk1.Label(font=("Meiryo UI",12),anchor=tk1.W, width=10) label3["bg"] = "#EEEEE8" label3.place(x=120, y=25) label4 = [""]*7 a1 = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday" ] for i1 in range( 7 ): label4[i1] = tk1.Label(text=a1[i1], font=("Meiryo UI",9), anchor=tk1.CENTER, width=10) label4[i1]["bg"] = "#EEEEE8" label4[i1].place(x=30+103*i1, y=55) btn1 = [""]*42 for i1 in range( 6 ): for i2 in range( 7 ): fg1 = "#000000" if i2 == 0: bg1 = "#FFF0F0" fg1 = "#FF0000" elif i2 == 6: bg1 = "#F6F0FF" fg1 = "#0000A0" else: bg1 = "#FFFFFF" btn1[i2+7*i1] = tk1.Button(root, font=("Meiryo UI",11), anchor=tk1.NW, bg=bg1, fg=fg1, relief='flat', command=btn_click1) x2 = 20 + 103 * i2 y2 = 75 + i1 * 73 btn1[i2+7*i1].place(x=x2, y=y2, width=100, height=70) btn2 = tk1.Button(root, text="prev", font=("Meiryo UI",11), bg="#D0D0D0", relief='flat', command=lambda:prev_next1(-1) ) btn2.place(x=600, y=10, width=60, height=30) btn3 = tk1.Button(root, text="next", font=("Meiryo UI",11), bg="#D0D0D0", relief='flat', command=lambda:prev_next1(1) ) btn3.place(x=680, y=10, width=60, height=30) now1 = dt1.datetime.now() y1 = now1.year m1 = now1.month d1 = now1.day wd1 = 0 cal1 = [""]*40 prev_next1( 0 ) import tkinter as tk import tkinter.ttk as ttk def search(): text.set("add") # メインフレームの作成と設置 frame = ttk.Frame(root) frame.pack(padx=20,pady=10) # 各種ウィジェットの作成 btn4 = tk1.Button(root, text="add", font=("Meiryo UI",11), bg="#D0D0D0", relief='flat',) btn4.place(x=520, y=10, width=60, height=30) root = tk1.Toplevel() root.title(u"入力画面") root.geometry("755x530+100+100") root["bg"] = "#EEEEE8" root.mainloop()

Pythonでアプリ制作をしています。
2つの機能を別々のファイルで制作しています。
1つ目は、利用者が入力をする画面、もうひとつは、カレンダーと1つ目の画面に飛ぶためのボタンを配置してます。

今、ボタン(button4)から入力画面に飛ぶためのプログラムを作っているのですが、上手く行きません💦
「もし、ボタン4が押されたら入力画面.pyに飛ぶ」というプログラムを教えていただきたいです。
試したこととしては、
import os
btn4=open('入力画面.py')
を試しましたがエラーにはならず、ただ何も実行されませんでした。
ご回答よろしくお願いします

以下のような質問にはグッドを送りましょう

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

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

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/11/28 10:26依頼された後にこの質問は修正されています

こちらの質問が他のユーザーから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました。

TakaiY

2022/11/28 11:13 編集

質問の内容では、読んだ人にあなたの書いているプログラムがどのようなものなのかまったくわからないので、「入力画面.pyに飛ぶ」と言われても役に立つアドバイスはできません。 まずは、現状のソースコードを提示しましょう。 質問は編集できますので、ここに貼らないでください。 ソースコードを挿入するときは、コード </> ボタンで出てくる枠の中に貼ると読みやくくできます。
TakaiY

2022/11/28 12:58

これではコードが読めないので、</>コードの挿入ボタンを押すと出てくる枠の中に貼ってください。
Himasin

2022/11/28 14:15

何度もすいません💦これで大丈夫でしょうか?

回答1

0

ベストアンサー

pythonのプログラムで別のpyファイルを起動する方法はありますが、それでは、それは別のプログラムになってしまい、データの受け渡しなどが困難になります。

ここで、ポイントが2つあります。

1つめは、tkinterで複数のウィンドウを開く方法です。
tkで複数のウィンドウを持つプログラムを作る場合、メインのウィンドウ以外のものは、tkinter.Toplevel()というコマンドを使ってつくります。
「tkinter Toplevel」 で検索するといくつも例が出てきます。

2つめは、pythonでプログラムを複数のファイルに分ける方法です。
pythonにはlimportという仕組みがあり、モジュールを読み込むのに使いますが、自分で作ったファイルもモジュールとして読み込んで使うことができます。情報ののやりとりも同様にできます。

ということで、質問の内容についてですが、

  1. 入力画面.py の画面をToplevelで実装する。
    基本的に、tk.Tk()としているところを、 tk.Toplevel() にするだけで画面は作れると思います。

  2. 入力画面.py の内容をモジュールとして実行できるようにして、メインのプログラムでimportして使えるようにする。
    現在は、ファイルを実行すると画面が表示されるようになっていますが、「root = tk1.Tk()」以降も関数化して、表示用の関数(たとえばinput_window()など)を起動すると画面が表示されるようにする。
    メインのプログラム側では、必要なタイミングで入力画面.input_window()を実行すれば画面が表示される。

投稿2022/11/29 02:16

TakaiY

総合スコア10449

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

Himasin

2022/11/29 07:09

試したのですが、もし、addを押されたらもうひとつのウィンドウを開くという実行ができません。 ソースコードの後半を書き換えたので、もう一度教えていただきたいです。 初心者なので何度も質問すいません
TakaiY

2022/11/29 08:34

そのようにちょっと直すだけで済むような内容ではありません。 どういうファイル名かわかりませんが、最初に貼ってあるコードの方がサブのウィンドウなので、そちらをToplevelで動くようにし、さらに、importして動くようにする必要があります。
Himasin

2022/11/29 08:57

わかりましたありがとうございました。

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

Python

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