ダイアログを開くとき、またはウィンドウを作成するときに、tkinterは2番目のウィンドウを開きます

joluga

私は次の問題を抱えています。TkinterでGUIを作成し、IDE(Spyder)で実行するとすべてが正常に機能しますが、ファイルを名前を付けて保存し、.pyを実行するだけで開始したい場合は、ウィンドウが作成されるかダイアログが開くたびに、2番目のTkinterウィンドウがポップアップしています。コードを.pywとして保存すると、同じ問題が発生します。同じ問題が続く短い例を投稿しました。

import tkinter as tk
from tkinter import messagebox


class test_GUI(tk.Frame):
    def __init__(self,master=None):
        super().__init__(master)
        self._initializeWindow()
        self._window.protocol("WM_DELETE_WINDOW", self.__on_closing)
        self._window.mainloop()

    def _initializeWindow(self):
        self._window=tk.Tk()
        self._window.title("The window I initzialized")

    def __on_closing(self):
        if(messagebox.askokcancel("Quit", "Quit program?")):
            self._window.destroy()
            self._window.quit()        

app=test_GUI()
fhdrsdg

クラスを次のように定義します

class test_GUI(tk.Frame):

したがって、クラスはから継承しtk.Frameます。つまり、クラスは基本的に追加機能を備えたフレームです。
あなたがするとき

super().__init__(master)

継承元のクラスであるを初期化しますtk.Frame現時点では、tk.Tkオブジェクト(およびmaster=Noneはありませんフレーム(または他のtkinterウィジェット)はのインスタンスなしでは存在できないためtk.Tk、tkinterはサイレントにインスタンスを作成します。これが最初のウィンドウです。
その後、あなたは電話します

self._window = tk.Tk()

tk.Tk自分でインスタンスを作成します。これは2番目のウィンドウです。2つのウィンドウが必要ないことに加えてtk.Tk、予期しない動作が発生するため、複数のインスタンス(より正確には関連するTclインタープリター)を同時に実行しないでください。

では、どうすればこれを修正できますか?
基本的に2つのオプションがあります。継承を削除するかtk.Tk、クラスを開始する前に開始します。

継承がなければ、アプリは次のように構成できます

import tkinter as tk

class test_GUI():
    def __init__(self):
        self._window=tk.Tk()
        self._window.title("The window I initzialized")

        self.button = tk.Button(self._window, text='Test button')
        self.button.pack()

        ...
        self._window.mainloop()

継承を使用すると、このように行うことができます

import tkinter as tk

class test_GUI(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)

        self.master = master
        self.master.title("The window I initzialized")

        self.button = tk.Button(self, text='Test button')
        self.button.pack()


root = tk.Tk()
app=test_GUI(root)
app.pack(fill='both', expand=True)
root.mainloop()

どちらの方法でも問題なく動作します。個人的には継承のあるバージョンが好きです。tkinterアプリケーションの構築に関するBryanOakleyの投稿もここでチェックしてください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Tkinterは2つのウィンドウを開きます

分類Dev

2 つの Tkinter ウィンドウを同時に開くことはできますか?

分類Dev

ダイアログウィンドウを開くときにページ全体を暗くし、フェードアウト効果を生成します

分類Dev

WPF:最初のウィンドウを閉じ、2番目のウィンドウでPDFを開きます

分類Dev

geditは2番目のファイルを新しいウィンドウで開きます。Ubuntu 19.10

分類Dev

ダイアログまたはポップアップウィンドウの作成方法は、メインウィンドウの後ろにとどまり、メインウィンドウを覆わないようにすることができます

分類Dev

Sublimeは2つのウィンドウを開きます

分類Dev

新しいプログラムを開くときに現在のウィンドウをアクティブに保つ方法はありますか?

分類Dev

tkinterウィンドウに表示されるタイマーを作成するためのForループですが、ウィンドウを開きません

分類Dev

Sublime Textからビルドするときは、Gnuplotウィンドウを開いたままにします

分類Dev

Selenium Webdriverは、バックグラウンドでブラウザウィンドウをサイレントに開くことができますか?

分類Dev

Tkinterは、マルチプロセッシングでファイルを選択すると、ウィンドウが1つしかない場合に、複数のGUIウィンドウを開きます。

分類Dev

Tkinter iwant を使用して 2 番目のウィンドウを開き、前のウィンドウを閉じます

分類Dev

エクスプローラーからファイルを開くときにExcelが2番目の空白のウィンドウを開かないようにするにはどうすればよいですか?

分類Dev

開くときにtkinterウィンドウをすでに透明にする方法は?

分類Dev

Powershell Start-Process-ウィンドウを開いたままにすることはできますか?

分類Dev

kivy.core.window から Window をインポートすると、クラッシュする 2 番目の Kivy ウィンドウが開きます。

分類Dev

別のウィンドウを開くときにJFrameを黒くする

分類Dev

シェルをクリックしたときにプログラムを実行すると、tkinterウィンドウが開きません

分類Dev

開いているウィンドウにAIRアプリを固定することはできますか?

分類Dev

matplotlibをtkinterキャンバスに埋め込むと、2つのウィンドウが開きます

分類Dev

新しいブラウザのタブ/ウィンドウでリンクを開くときにモーダルダイアログを閉じる

分類Dev

matplotlibウィンドウと同時にtkinterウィンドウを開きたいですか?

分類Dev

Unityは2つのポップアップウィンドウを開くことができません

分類Dev

モーダルウィンドウを表示するときに追加のウィンドウをアクティブに保つ方法はありますか?

分類Dev

ドキュメント全体が読み込まれる前に、JavaScriptでセカンダリウィンドウを開くことはできますか?

分類Dev

Firefoxは、ウィンドウを頻繁に開閉するときにメモリを使いすぎます

分類Dev

向きが変わったときにログインダイアログウィンドウに文字列を保持します。アンドロイド

分類Dev

Xが押されたときにダイアログウィンドウを閉じる方法を知っている人はいますか?

Related 関連記事

  1. 1

    Tkinterは2つのウィンドウを開きます

  2. 2

    2 つの Tkinter ウィンドウを同時に開くことはできますか?

  3. 3

    ダイアログウィンドウを開くときにページ全体を暗くし、フェードアウト効果を生成します

  4. 4

    WPF:最初のウィンドウを閉じ、2番目のウィンドウでPDFを開きます

  5. 5

    geditは2番目のファイルを新しいウィンドウで開きます。Ubuntu 19.10

  6. 6

    ダイアログまたはポップアップウィンドウの作成方法は、メインウィンドウの後ろにとどまり、メインウィンドウを覆わないようにすることができます

  7. 7

    Sublimeは2つのウィンドウを開きます

  8. 8

    新しいプログラムを開くときに現在のウィンドウをアクティブに保つ方法はありますか?

  9. 9

    tkinterウィンドウに表示されるタイマーを作成するためのForループですが、ウィンドウを開きません

  10. 10

    Sublime Textからビルドするときは、Gnuplotウィンドウを開いたままにします

  11. 11

    Selenium Webdriverは、バックグラウンドでブラウザウィンドウをサイレントに開くことができますか?

  12. 12

    Tkinterは、マルチプロセッシングでファイルを選択すると、ウィンドウが1つしかない場合に、複数のGUIウィンドウを開きます。

  13. 13

    Tkinter iwant を使用して 2 番目のウィンドウを開き、前のウィンドウを閉じます

  14. 14

    エクスプローラーからファイルを開くときにExcelが2番目の空白のウィンドウを開かないようにするにはどうすればよいですか?

  15. 15

    開くときにtkinterウィンドウをすでに透明にする方法は?

  16. 16

    Powershell Start-Process-ウィンドウを開いたままにすることはできますか?

  17. 17

    kivy.core.window から Window をインポートすると、クラッシュする 2 番目の Kivy ウィンドウが開きます。

  18. 18

    別のウィンドウを開くときにJFrameを黒くする

  19. 19

    シェルをクリックしたときにプログラムを実行すると、tkinterウィンドウが開きません

  20. 20

    開いているウィンドウにAIRアプリを固定することはできますか?

  21. 21

    matplotlibをtkinterキャンバスに埋め込むと、2つのウィンドウが開きます

  22. 22

    新しいブラウザのタブ/ウィンドウでリンクを開くときにモーダルダイアログを閉じる

  23. 23

    matplotlibウィンドウと同時にtkinterウィンドウを開きたいですか?

  24. 24

    Unityは2つのポップアップウィンドウを開くことができません

  25. 25

    モーダルウィンドウを表示するときに追加のウィンドウをアクティブに保つ方法はありますか?

  26. 26

    ドキュメント全体が読み込まれる前に、JavaScriptでセカンダリウィンドウを開くことはできますか?

  27. 27

    Firefoxは、ウィンドウを頻繁に開閉するときにメモリを使いすぎます

  28. 28

    向きが変わったときにログインダイアログウィンドウに文字列を保持します。アンドロイド

  29. 29

    Xが押されたときにダイアログウィンドウを閉じる方法を知っている人はいますか?

ホットタグ

アーカイブ