Giter Club home page Giter Club logo

mtwit's Introduction

MTwit

これはなに?

  • TwitterのTLに時間を吸われるエンジニアやゲーマー、トレーダーのためのMinimumなクライアント。
  • TLを表示しないが自身の最低限のTwitter活動を妨げないような設計になっている。

機能

  • Tweet (text, image, video) //WIP (image, video)
  • Multi Account //WIP
  • Custom UI Theme //WIP
  • //WIP

うぃっぷ

How to install

  • python 3.6+ (開発環境は3.7)

  • pip install -r requirement.txtだけで動作するよ!

  • pip以外からインストールする必要はないはずだよ!

  • 問題があったらissueを必ず立ててね!

開発中なのでmain.pyを直接起動することになるよ! ビルドも一切されないよ!

貢献したいけどコードが汚くて何が何だかわからないよ?

  • help wantedタグを付けてissueを立ててね ---> 時間があればきれいに書き直すよ! ---> 時間がなくてもガイドは最低限行うよ

  • もし読めればきれいに直してくれても構わないよ!

requirement.txtから環境作ったけど動かなくない?

  • python3.7でしか動作確認してないよ! ---> 別バージョンで動いたら教えてね!
  • pip install -r requirement.txtをしてエラーで異常終了してない? ---> もしかするとpywin32のインストールで失敗するかもしれないよ! ---> pip以外にもインストーラのバイナリが配布されているのでこちらも使ってみてほしい!

どうしてもだめならissueを立ててね!

mtwit's People

Contributors

rz7d avatar underecho avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

Forkers

rz7d

mtwit's Issues

QML/Qt Designer採用の是非について

(このIssueは #10 の後に実施されるべきです)


プログラミング言語のコードによるUIの記述は、本質を理解しにくく、可読性を損なう可能性があります。
このIssueではQMLなどのUI言語の使用の是非について議論します。

現在、MTwitでは、PythonによるUIの記述をしています。
これはPythonの機能を最大限に活かし、ビジネスロジックとシームレスに統合できます。
しかし、Qtのセットアップに長ったらしい記述が必要になるのも事実です。

QMLなどでは宣言的な記述によりUIを構築でき、より直感的にデザインすることが可能になります。

ただし、学習コストが高いのも事実です。さらに、Qt特有のリソースの扱いのクセなども把握しなければなりません。

このIssueで公の場での意見を求めます。

Problem with Win32Window#focus

focus() メソッドを呼び出す際に、詳細不明なエラーが発生します。

原因と事実

No error message is available となるのは win32gui が悪そう

Traceback (most recent call last):
  File "C:\Users\azure\Documents\workspace\MTwit\mTwit\ui\MainWindow.py", line 143, in iconActivated
    self.ShowOrHide()
  File "C:\Users\azure\Documents\workspace\MTwit\mTwit\ui\MainWindow.py", line 147, in ShowOrHide
    self.showEvent_()
  File "C:\Users\azure\Documents\workspace\MTwit\mTwit\ui\MainWindow.py", line 180, in showEvent_
    self.w.focus()
  File "C:\Users\azure\Documents\workspace\MTwit\mTwit\ui\ui_base.py", line 30, in focus
    win32gui.SetForegroundWindow(self.handle)
pywintypes.error: (0, 'SetForegroundWindow', 'No error message is available')

**Mgr クラスの廃止

可読性を上げるために **Mgr クラスを廃止してください。

これらのクラスには複数の機能が含まれており、保守性が低下しています。
機能を適切に分割してより使いやすくすることで、可読性を向上させます。

UIとコアを分離する

モデル部のクラスの至るところからUIを呼び出していてメンテナンスできません。
MVCとは言わず、とりあえずM/V分離しましょう

ユーティリティはステートフルにしない

WindowMgrのfind_windowメソッドなどは、結果を自身のフィールドに書き込むステートフルなAPIを持ちます。

class WindowMgr:
    def find_window(self, class_name, window_name=None):
        """find a window by its class_name"""
        self._handle = win32gui.FindWindow(class_name, window_name)

これはプログラマが文脈を意識して書かなければならず、非直感的です。
なるべく文脈非依存にするために、メソッドの実行結果を return するように変更します。

class WindowMgr:
    def find_window(self, class_name, window_name=None):
        """find a window by its class_name"""
        return win32gui.FindWindow(class_name, window_name)

フィールドを持つことは良いですが、なるべく不変にしてください。
中身がころころ変わると追うのが大変です。

あるいは、ハンドルを隠蔽したい場合、ファクトリとして定義することもできます。
これは Java でよく使われるパターンです。
本来のイニシャライズの意図と関係ないので、コンストラクタをオーバーロードするのではなく、classmethod を使うのが好ましいでしょう。

class WindowMgr:
    @classmethod
    def find_window(cls, class_name: str, window_name: str):
        return cls(win32gui.FindWindow(class_name, window_name))

    def __init__(self, handle):
        self._handle = handle

    @property
    def handle(self):
        return self._handle

Qt リソースシステムによるリソース管理について

このトピックでは Qt Resource Collection などを用いたリソース管理の導入の是非について意見を求めます。
#15 の前提トピックです。
前提として #10 の完了が求められます。


Qt 側でリソース管理を行いやすくするために、QRC などの導入を検討します。
現時点では MTwit のボタンの画像などは指定されたディレクトリから読み取っていますが、これを Qt のリソースとして管理することで、拡張性や可読性を向上させます。

問題点としては、次が挙げられます:

  • Qt 独自のクセがあるため、学習コストが高い。
  • ディレクトリと違いビルドが必要で、編集が行いにくい。
  • Python 開発と相性が悪い。

メリットは次が挙げられます:

  • リソースを圧縮できる。
  • 単一のアーカイブから読み込むので、読み込みが高速化される。
  • Qt 側での管理が楽になる。(はず)

導入のタイミングとしては、自動テスト環境が揃い、PE (.exe) ファイルにパッケージできるようになった頃が望ましいでしょう。

画像ツイートの実装

Ctrl+VでもD&Dでもファイルを指定できるようにしたい

ウィンドウ側のQtでどのように処理するか

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.