githubの動作例をpython2からpython3に変換しようとしていますが、わからない問題が発生しています。この例をpython2からpython3に変換する方法
元は、私は以下のパッチを適用し、SampleApp のinit方法にあまりにも多くの引数に関するエラーメッセージが表示されますhttps://gist.github.com/EugeneBakin/76c8f9bcec5b390e45df です。唯一の呼び出しがまったく引数をもたないとき、なぜ元のものが引数と** kwargsを持っていたのかわからないので、何かが私のために足りない。しかし、python2で動作していたので、python3でもうまく動作することを期待していました。
ただし、エラーメッセージのスタックトレースにその呼び出しが含まれていないか、またはその呼び出しが含まれていないため、問題ではありません。もう一つのパズル。
私は実際の使用事例でこれを適用するためにいくつか必要があるかもしれないので、私はこれを盲目的に取り除くだけで解決したいと思います。
また、私は危険であると考えて読者に有用な情報として隠しているので、*として取り込むことを取り除きたいと思います。
パッチ:
--- VSFrame.py 2017-12-16 14:30:33.458923856 -0800
+++ VSFrame3.py 2017-12-16 15:01:21.914423486 -0800
@@ -1,21 +1,21 @@
-#!/usr/bin/python
+#!/usr/bin/env python3
# -*- coding: utf-8 -*-
-from Tkinter import * # from x import * is bad practice
-from ttk import *
+import tkinter as tk
+import tkinter.ttk as ttk
# http://tkinter.unpythonic.net/wiki/VerticalScrolledFrame
-class VerticalScrolledFrame(Frame):
+class VerticalScrolledFrame(ttk.Frame):
"""A pure Tkinter scrollable frame that actually works!
* Use the 'interior' attribute to place widgets inside the scrollable frame
* Construct and pack/place/grid normally
* This frame only allows vertical scrolling
"""
def __init__(self, parent, *args, **kw):
- Frame.__init__(self, parent, *args, **kw)
+ super().__init__(self, parent, *args, **kw)
# create a canvas object and a vertical scrollbar for scrolling it
- vscrollbar = Scrollbar(self, orient=VERTICAL)
+ vscrollbar = ttk.Scrollbar(self, orient=VERTICAL)
vscrollbar.pack(fill=Y, side=RIGHT, expand=FALSE)
canvas = Canvas(self, bd=0, highlightthickness=0,
yscrollcommand=vscrollbar.set)
@@ -51,9 +51,9 @@
if __name__ == "__main__":
- class SampleApp(Tk):
+ class SampleApp(tk):
def __init__(self, *args, **kwargs):
- root = Tk.__init__(self, *args, **kwargs)
+ root = tk.__init__(self, *args, **kwargs)
self.frame = VerticalScrolledFrame(root)
とウィレム(そのためのおかげで)によるコメントの後、それは今
--- VSFrame.py 2017-12-16 14:30:33.458923856 -0800
+++ VSFrame3.py 2017-12-16 16:04:00.938380716 -0800
@@ -1,21 +1,21 @@
-#!/usr/bin/python
+#!/usr/bin/env python3
# -*- coding: utf-8 -*-
-from Tkinter import * # from x import * is bad practice
-from ttk import *
+import tkinter as tk
+import tkinter.ttk as ttk
# http://tkinter.unpythonic.net/wiki/VerticalScrolledFrame
-class VerticalScrolledFrame(Frame):
+class VerticalScrolledFrame(ttk.Frame):
"""A pure Tkinter scrollable frame that actually works!
* Use the 'interior' attribute to place widgets inside the scrollable frame
* Construct and pack/place/grid normally
* This frame only allows vertical scrolling
"""
def __init__(self, parent, *args, **kw):
- Frame.__init__(self, parent, *args, **kw)
+ super().__init__(self, parent, *args, **kw)
# create a canvas object and a vertical scrollbar for scrolling it
- vscrollbar = Scrollbar(self, orient=VERTICAL)
+ vscrollbar = ttk.Scrollbar(self, orient=VERTICAL)
vscrollbar.pack(fill=Y, side=RIGHT, expand=FALSE)
canvas = Canvas(self, bd=0, highlightthickness=0,
yscrollcommand=vscrollbar.set)
@@ -51,10 +51,9 @@
if __name__ == "__main__":
- class SampleApp(Tk):
+ class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
- root = Tk.__init__(self, *args, **kwargs)
-
+ root = tk.TK.__init__(self, *args, **kwargs)
self.frame = VerticalScrolledFrame(root)
self.frame.pack()
それは、 '+クラスSampleApp(tk.Tk)する必要があります:' –
少しだけ、さらに私を取得します@Willem、それに感謝します。これでmodule .__ init __()の最初の引数はSampleAppではなくstrでなければならないと不平を言っています。 – 4dummies
とPython3はPython 2からPython 3に多くの要素を変換できるプログラム[2to3](https://docs.python.org/3.6/library/2to3.html)がインストールされています。 – furas