{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## 源数据\n", "# NGV明细--门店开户月、对应留存门店数、G门店数三个数据\n", "# ● 操作一:增加开户月一列(标黄色);\n", "# ● 操作二:通过数据透视表进行数据分析,通过”门店阶段“、”开户月“、”G状态“分析前三列数据;" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "ename": "TclError", "evalue": "expected integer but got \"bold\"", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mTclError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 41\u001b[0m \u001b[0mwindow\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msg\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mWindow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"周报数据处理\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0msg\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mFrame\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m''\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlayout\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mborder_width\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m3\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0msize\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m580\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m460\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmodal\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 42\u001b[0m \u001b[1;32mwhile\u001b[0m \u001b[1;32mTrue\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 43\u001b[1;33m \u001b[0mevent\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvalues\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mwindow\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mread\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 44\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mevent\u001b[0m \u001b[1;33m==\u001b[0m \u001b[0msg\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mWIN_CLOSED\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mevent\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;34m'Exit'\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 45\u001b[0m \u001b[1;32mbreak\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\PySimpleGUI\\PySimpleGUI.py\u001b[0m in \u001b[0;36mread\u001b[1;34m(self, timeout, timeout_key, close)\u001b[0m\n\u001b[0;32m 10073\u001b[0m \u001b[1;32mwhile\u001b[0m \u001b[1;32mTrue\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 10074\u001b[0m \u001b[0mWindow\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_root_running_mainloop\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mTKroot\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m> 10075\u001b[1;33m \u001b[0mresults\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_read\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtimeout_key\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mtimeout_key\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 10076\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mresults\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 10077\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mresults\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m==\u001b[0m \u001b[0mDEFAULT_WINDOW_SNAPSHOT_KEY\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\PySimpleGUI\\PySimpleGUI.py\u001b[0m in \u001b[0;36m_read\u001b[1;34m(self, timeout, timeout_key)\u001b[0m\n\u001b[0;32m 10144\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 10145\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mShown\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m> 10146\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_Show\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 10147\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 10148\u001b[0m \u001b[1;31m# if already have a button waiting, the return previously built results\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\PySimpleGUI\\PySimpleGUI.py\u001b[0m in \u001b[0;36m_Show\u001b[1;34m(self, non_blocking)\u001b[0m\n\u001b[0;32m 9884\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mUseDefaultFocus\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mFalse\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 9885\u001b[0m \u001b[1;31m# -=-=-=-=-=-=-=-=- RUN the GUI -=-=-=-=-=-=-=-=- ##\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 9886\u001b[1;33m \u001b[0mStartupTK\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 9887\u001b[0m \u001b[1;31m# If a button or keyboard event happened but no results have been built, build the results\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 9888\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mLastKeyboardEvent\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mLastButtonClicked\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\PySimpleGUI\\PySimpleGUI.py\u001b[0m in \u001b[0;36mStartupTK\u001b[1;34m(window)\u001b[0m\n\u001b[0;32m 16864\u001b[0m \u001b[1;31m# root.protocol(\"WM_DELETE_WINDOW\", MyFlexForm.DestroyedCallback())\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 16865\u001b[0m \u001b[1;31m# root.bind('', MyFlexForm.DestroyedCallback())\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m> 16866\u001b[1;33m \u001b[0m_convert_window_to_tk\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mwindow\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 16867\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 16868\u001b[0m \u001b[1;31m# Make moveable window\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\PySimpleGUI\\PySimpleGUI.py\u001b[0m in \u001b[0;36m_convert_window_to_tk\u001b[1;34m(window)\u001b[0m\n\u001b[0;32m 16751\u001b[0m \u001b[0mInitializeResults\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mwindow\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 16752\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m> 16753\u001b[1;33m \u001b[0mPackFormIntoFrame\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mwindow\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmaster\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mwindow\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 16754\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 16755\u001b[0m \u001b[0mwindow\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mTKroot\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mconfigure\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mpadx\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mwindow\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mMargins\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mpady\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mwindow\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mMargins\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\PySimpleGUI\\PySimpleGUI.py\u001b[0m in \u001b[0;36mPackFormIntoFrame\u001b[1;34m(form, containing_frame, toplevel_form)\u001b[0m\n\u001b[0;32m 15989\u001b[0m \u001b[0mlabeled_frame\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0melement\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mWidget\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtk\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mLabelFrame\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtk_row_frame\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtext\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0melement\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mTitle\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrelief\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0melement\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mRelief\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 15990\u001b[0m \u001b[0melement\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mTKFrame\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mlabeled_frame\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m> 15991\u001b[1;33m \u001b[0mPackFormIntoFrame\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0melement\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlabeled_frame\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtoplevel_form\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 15992\u001b[0m \u001b[0mexpand\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfill\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrow_should_expand\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrow_fill_direction\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_add_expansion\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0melement\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrow_should_expand\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrow_fill_direction\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 15993\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0melement\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mVerticalAlignment\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\PySimpleGUI\\PySimpleGUI.py\u001b[0m in \u001b[0;36mPackFormIntoFrame\u001b[1;34m(form, containing_frame, toplevel_form)\u001b[0m\n\u001b[0;32m 16016\u001b[0m \u001b[0mlabeled_frame\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mconfigure\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mforeground\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0melement\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mTextColor\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 16017\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mfont\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m> 16018\u001b[1;33m \u001b[0mlabeled_frame\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mconfigure\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfont\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mfont\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 16019\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0melement\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mTitleLocation\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 16020\u001b[0m \u001b[0mlabeled_frame\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mconfigure\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlabelanchor\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0melement\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mTitleLocation\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\tkinter\\__init__.py\u001b[0m in \u001b[0;36mconfigure\u001b[1;34m(self, cnf, **kw)\u001b[0m\n\u001b[0;32m 1644\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mallowed\u001b[0m \u001b[0mkeyword\u001b[0m \u001b[0marguments\u001b[0m \u001b[0mcall\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mmethod\u001b[0m \u001b[0mkeys\u001b[0m\u001b[1;33m.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1645\u001b[0m \"\"\"\n\u001b[1;32m-> 1646\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_configure\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'configure'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcnf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkw\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1647\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1648\u001b[0m \u001b[0mconfig\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mconfigure\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\tkinter\\__init__.py\u001b[0m in \u001b[0;36m_configure\u001b[1;34m(self, cmd, cnf, kw)\u001b[0m\n\u001b[0;32m 1634\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcnf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstr\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1635\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_getconfigure1\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m_flatten\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_w\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcmd\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'-'\u001b[0m\u001b[1;33m+\u001b[0m\u001b[0mcnf\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1636\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtk\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcall\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m_flatten\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_w\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcmd\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_options\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcnf\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1637\u001b[0m \u001b[1;31m# These used to be defined in Widget:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1638\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mTclError\u001b[0m: expected integer but got \"bold\"" ] } ], "source": [ "import pandas as pd\n", "import PySimpleGUI as sg\n", "import os\n", "import platform\n", "import sys\n", "from pathlib import Path\n", "# 切换工作路径\n", "if platform.system() == \"Windows\":\n", " root = os.getcwd()\n", "else:\n", " root = os.path.sep.join(sys.argv[0].split(os.path.sep)[:-1]) # 仅适用于pyinstaller 打包应用是有效\n", " root = Path(root)\n", "sg.theme('Default1') # 设置主题\n", "os.chdir(root) # os.chdir() 方法用于改变当前工作目录到指定的路径。\n", "root_path = Path(os.path.abspath('.')) # 取文件绝对路径os.path.abspath()\n", "\n", "\n", "\"\"\" 其它top功能区 \"\"\"\n", "sg.Frame('{:22}'.format('1.请选择处理的文件类型:'), , font=f'Any bold')\n", "\n", "\"\"\" 数据上传窗口 \"\"\"\n", "layout = [\n", " [sg.Text('请选择处理类型:'),sg.Combo(['智能推荐数据', '短信数据', '线上化数据'],size=(33, 1), key='-selective type-'),sg.Submit('确定', key='-selective ok-')]\n", "]\n", "\"\"\" 主窗口运行 \"\"\"\n", "window = sg.Window(\"周报数据处理\", [[sg.Frame('', layout, border_width=3,size=(580,460))]], modal=True)\n", "while True:\n", " event, values = window.read()\n", " if event == sg.WIN_CLOSED or event == 'Exit':\n", " break \n", " if event == '-selective ok-' and values['-selective type-'] ==\"智能推荐数据\":\n", " print(values['-selective type-'])\n", " \n", "\n", "window.close()" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "ename": "AttributeError", "evalue": "module 'PySimpleGUI' has no attribute 'timedata'", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 49\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mevent\u001b[0m \u001b[1;33m==\u001b[0m \u001b[0msg\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mWIN_CLOSED\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 50\u001b[0m \u001b[1;32mbreak\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 51\u001b[1;33m \u001b[0mcurrent_time\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msg\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtimedata\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'time'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 52\u001b[0m \u001b[0mwindow\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'_TIME_'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcurrent_time\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 53\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mindex\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata_type\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mAttributeError\u001b[0m: module 'PySimpleGUI' has no attribute 'timedata'" ] }, { "ename": "", "evalue": "", "output_type": "error", "traceback": [ "\u001b[1;31m在当前单元格或上一个单元格中执行代码时 Kernel 崩溃。请查看单元格中的代码,以确定故障的可能原因。有关详细信息,请单击 此处。有关更多详细信息,请查看 Jupyter log。" ] } ], "source": [ "\n", "import PySimpleGUI as sg\n", "\n", "data_type = ['智能推荐数据', '短信数据', '线上化数据']\n", "selected_data = ''\n", "\n", "# 左侧区域\n", "left_layout = [\n", " [sg.Text('当前时间:')],\n", " [sg.Text('加载时间', size=(15, 1), font=('Helvetica', 18), justification='center', key='_TIME_')],\n", " [sg.Text('请选择需要处理的数据类型:')],\n", " [sg.Radio(text, 'data_type', default=(True if index == 0 else False), k=f'_TYPE_{index}') for index, text in enumerate(data_type)],\n", " [sg.Button('提交', size=(10, 1), bind_return_key=True)],\n", " [sg.Text('_'*80)],\n", "]\n", "\n", "# 中间的top切换区域\n", "top_layouts = [\n", " sg.TabGroup([\n", " [\n", " sg.Tab('智能推荐数据',\n", " [[sg.Text('这是智能推荐数据的top页面')]], key='_TAB_RECOMMENDATION_'),\n", " sg.Tab('短信数据',\n", " [[sg.Text('这是短信数据的top页面')]], key='_TAB_SMS_'),\n", " sg.Tab('线上化数据',\n", " [[sg.Text('这是线上化数据的top页面')]], key='_TAB_ONLINE_'),\n", " ]\n", " ],\n", " tab_location='topleft',\n", " enable_events=True,\n", " key='_TOP_TABGROUP_')\n", "]\n", "\n", "# 右侧的信息提示区\n", "information_layout = [\n", " [sg.Text('当前操作:', font=('Helvetica', 18), justification='left', size=(25, 1))],\n", " [sg.Output(size=(60, 10), font=('Helvetica', 12), background_color='white', text_color='black', key='_INFO_OUTPUT_')]\n", "]\n", "\n", "layout = [\n", " [sg.Column(left_layout, element_justification='c')],\n", " [sg.Column(top_layouts, element_justification='c')],\n", " [sg.Column(information_layout, element_justification='c')],\n", "]\n", "\n", "window = sg.Window('PySimpleGUI page demo', layout, size=(800, 600), resizable=True)\n", "\n", "while True:\n", " event, values = window.read(timeout=1000)\n", " if event == sg.WIN_CLOSED:\n", " break\n", " current_time = sg.timedata()['time']\n", " window['_TIME_'].update(current_time)\n", " for index in range(len(data_type)):\n", " if values[f'_TYPE_{index}']:\n", " selected_data = data_type[index]\n", " break\n", " if event == '提交':\n", " window['_INFO_OUTPUT_'].print('[INFO] 当前选择的数据类型:%s' % selected_data)\n", " if selected_data == '':\n", " window['_INFO_OUTPUT_'].print('[WARNING] 未选择操作类型,请先选择操作类型!')\n", " elif selected_data == '智能推荐数据':\n", " window['_TOP_TABGROUP_'].select('_TAB_RECOMMENDATION_')\n", " elif selected_data == '短信数据':\n", " window['_TOP_TABGROUP_'].select('_TAB_SMS_')\n", " elif selected_data == '线上化数据':\n", " window['_TOP_TABGROUP_'].select('_TAB_ONLINE_')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "\n", "import PySimpleGUI as sg\n", "\n", "# 定义第一个Column的内容\n", "column1 = [[sg.Text('Data Types')],\n", " [sg.Radio('Type 1', 'data_type', default=True),\n", " sg.Radio('Type 2', 'data_type'),\n", " sg.Radio('Type 3', 'data_type'),\n", " sg.Radio('Type 4', 'data_type')]]\n", "\n", "# 定义第二个Column的内容\n", "column2 = [[sg.Text('Data Type 1', font=('Helvetica', 15), justification='center')],\n", " [sg.Frame('Top 1', [[sg.Button('Process', size=(10, 2))]]),\n", " sg.Frame('Top 2', [[sg.Button('Process', size=(10, 2))]]),\n", " sg.Frame('Top 3', [[sg.Button('Process', size=(10, 2))]])]]\n", "\n", "# 定义第三个Column的内容\n", "column3 = [[sg.Text('Progress', font=('Helvetica', 15), justification='center')],\n", " [sg.ProgressBar(100, orientation='h', size=(20, 20), key='progressbar')]]\n", "\n", "# 创建布局\n", "layout = [[sg.Column(column1), sg.Column(column2), sg.Column(column3)]]\n", "\n", "# 创建窗口\n", "window = sg.Window('Data Processing', layout)\n", "\n", "while True:\n", " event, values = window.read()\n", "\n", " # 支持窗口关闭\n", " if event == sg.WINDOW_CLOSED:\n", " break\n", "\n", " # 处理数据类型选择\n", " if event.startswith('Type '):\n", " window['Data Type 1'].update(event)\n", "\n", " # 处理进度更新\n", " if event == 'Process':\n", " for i in range(100):\n", " window['progressbar'].update(i + 1)\n" ] } ], "metadata": { "kernelspec": { "display_name": "F6processing", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.4" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }