Dup Ver Goto 📝

ModuleLookup

PT2/lang/python/qt/pyside6 does not exist
To
138 lines, 400 words, 2909 chars Page 'ModuleLookup' does not exist.

At first, one can simply from PySide6.QtWidgts import * but this causes problems. So at some point you want to lookup which class is in which module so you can make your imports explicit. This is a quick and dirty tool to help you do that.

Example Output

QApplication: QtWidgets
QColor: QtGui
QCoreApplication: QtCore
QFont: QtGui
QFontMetrics: QtGui
QHostAddress: QtNetwork
QPainter: QtGui
QPainterPath: QtGui
QPen: QtGui
QTimer: QtCore
QUdpSocket: QtNetwork
QWidget: QtWidgets
Qt: QtGui
QtCore: ?
QtGui: ?
QtNetwork: ?
QtWidgets: ?

Lookup In Files

#!/usr/bin/env python
import sys
import re

try:
  import PySide6.QtCore as QtCore
  import PySide6.QtGui as QtGui
  import PySide6.QtWidgets as QtWidgets
  import PySide6.QtNetwork as QtNetwork
except ModuleNotFoundError:
  print("Can't find PySide6")
  exit(1)

dir_QtCore = dir(QtCore)
dir_QtGui = dir(QtGui)
dir_QtWidgets = dir(QtWidgets)
dir_QtNetwork = dir(QtNetwork)

d = {}
for x in dir_QtCore:
  d[x] = "QtCore"
for x in dir_QtGui:
  d[x] = "QtGui"
for x in dir_QtWidgets:
  d[x] = "QtWidgets"
for x in dir_QtNetwork:
  d[x] = "QtNetwork"

args = sys.argv[1:]
found = set()
for arg in args:
  try:
    with open(arg) as f:
      a = f.read()
      qs = re.findall(r"Q[a-zA-Z]+",a)
      for x in qs:
        found.add(x)
  except Exception:
    print(f"# Fail Read {arg}")
    continue
rows = []
for x in sorted(found):
  if x in d:
    rows.append([x,d[x]])
  else:
    rows.append([x,"?"])
for x,y in rows:
  print(f"{x}: {y}")

Lookup Command Line Args

#!/usr/bin/env python
from jda_rich_table import RichTable
import sys

try:
  import PySide6.QtCore as QtCore
  import PySide6.QtGui as QtGui
  import PySide6.QtWidgets as QtWidgets
  import PySide6.QtNetwork as QtNetwork
except ModuleNotFoundError:
  print("Can't find PySide6")
  exit(1)

dir_QtCore = dir(QtCore)
dir_QtGui = dir(QtGui)
dir_QtWidgets = dir(QtWidgets)
dir_QtNetwork = dir(QtNetwork)

d = {}
for x in dir_QtCore:
  d[x] = "QtCore"
for x in dir_QtGui:
  d[x] = "QtGui"
for x in dir_QtWidgets:
  d[x] = "QtWidgets"
for x in dir_QtNetwork:
  d[x] = "QtNetwork"

args = sys.argv[1:]
rows = []
for x in args:
  if x in d:
    rows.append([x,d[x]])
  else:
    rows.append([x,"?"])

# Print out
for x,y in rows:
  print(f"{x}: {y}")

Import Generator

Replace the bit at the end and it can generate the right import declaration.

# Print out
from collections import defaultdict as ddict

imps = ddict(set)
for cls,mod in rows:
  imps[mod].add(cls)
for mod in sorted(imps.keys()):
  clss = ", ".join(sorted(imps[mod]))
  print(f"from PySide6.{mod} import {clss}")

Example output:

from PySide6.QtCore import QCoreApplication, QTimer
from PySide6.QtGui import QColor, QFont, QFontMetrics, QPainter, QPainterPath, QPen, Qt
from PySide6.QtNetwork import QHostAddress, QUdpSocket
from PySide6.QtWidgets import QApplication, QWidget